我有作为从的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参数地址并不像以前一样。这并不令人意外,但内存的它指向的内容是不确定的(和我尝试看看还有什么时候访问冲突)。

这是怎么回事?

有帮助吗?

解决方案

每个的两个过程都有一个自己的地址空间,从而使从过程32.exe指针没有在64.exe有效。

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

例如,可以使用的CreateFileMapping 以创建共享存储器的命名的节。

scroll top