【发布时间】:2009-07-06 12:09:31
【问题描述】:
我遇到了一个指针的内容问题,因为从 32 位 C# 应用程序传递的 wParam 正在更改为 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。
在 32.dll 中需要一个 RECT* 的函数直接从 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 地址与以前不同。这并不意外,但它现在指向的内存内容是未定义的(我在尝试查看内存时遇到访问冲突)。
这里发生了什么?
【问题讨论】:
-
您能否添加包含如何初始化指针变量的源代码?
-
和这个问题一模一样:stackoverflow.com/questions/1086294/…
-
使用SendMessage会出现问题吗?
标签: c# c++ winapi 64-bit wow64