//perform unmanaged call public static uint Call(uint tocall, uint[] stack, uint thispar) { uint toreturn = 0; UnmanagedBuffer stackbuffer = new UnmanagedBuffer((uint)stack.Length * 4); for (uint i = 0; i < stack.Length; i++)//write reversed stack array { stackbuffer.WriteAt <uint>(stack[stack.Length - 1 - i], i * 4); } m_Parameters.WriteAt <uint>(tocall, data_alignment + 0 * 4); m_Parameters.WriteAt <uint>((uint)stack.Length, data_alignment + 1 * 4); m_Parameters.WriteAt <uint>((uint)stackbuffer.Address, data_alignment + 2 * 4); m_Parameters.WriteAt <uint>(thispar, data_alignment + 3 * 4); m_Call.DynamicInvoke(new object[] { }); toreturn = m_Parameters.ReadAt <uint>(data_alignment + 4 * 4); stackbuffer.Free(); return(toreturn); }