从32位C#PostMessage的PARAMS到64位C ++
题
我有作为从的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位的。你只需要使用选择的进程间通信技术,这两个过程之间传送的数据。
不隶属于 StackOverflow