从32位C#PostMessage的PARAMS到64位C ++(PostMessage param

2019-09-17 17:41发布

我有作为从的wParam一个32位C#应用程序传递一个指针的内容问题沿途被改变为64位的C ++程序。

有两个进程32.exe(在C#)和64.exe(在C ++)。 64.exe开始为32.exe的一个子进程。 对于64.exe 32.exe交窗口消息,其中之一具有的wParam是一个指针,指向RECT结构的阵列。 无论64.exe和32.exe有一个共同的DLL(用C ++编写,但编为不同的平台,当然),称为32.DLL和64.dll。

期待一个RECT *在32.DLL函数直接从32.exe具有相同RECT *稍后发布的调用,这个效果很好。 此后,它发布消息给64.exe,它调用相同的功能和注塑的wParam到RECT *:

else if (WM_SetDisabledAreas == message)
{
    SetDisabledAreas((RECT*)wParam, (UINT)lParam);
}

的消息发布如下:

    if (Is64Bit() && SubProcess64 != null)
    {
        Win32.PostMessage(SubProcess64.MainWindowHandle, WindowMessages.SetDisabledAreas,
            (uint)pointer.ToInt32(), length);
    }
    MessageBox.Show(pointer.ToString());
    DLL32.SetDisabledAreas(pointer, length);

通过调试我已经证实,收到消息,但是wParam参数的地址是不一样的,因为它以前。 这并不令人意外,但记忆的内容,现在指向是不确定的(并试图看看还有什么,当我得到一个访问冲突)。

这是怎么回事吗?

Answer 1:

这两个过程都具有自己的地址空间,因此,从过程32.exe指针不64.exe有效。

然而,这无关32位VS 64位的。 你只需要使用您所选择的进程间通信技术的两个进程之间传输数据。

例如,你可以使用的CreateFileMapping创建共享内存的命名部分。



文章来源: PostMessage params from 32-bit C# to 64-bit C++