例如,我刚刚调用了GetMessage(或者我在CallWndMsg钩子回调中)并获得了lParam和wParam。
可以使用SendMessage或PostMessage将此消息重新发送到其他进程的窗口,只使用收到的lParam和wPAram而不进行深层处理。我的意思是,如果这些参数(通常包含指定结构的指针)在重新发送期间仍然有效,或者我可能面临内存违规问题(或类似的东西)? 如果我能做到,系统如何确定何时可以发布和删除lPAram和wPAram?
PS似乎我无法为WM_COPYDATA做这件事,因为msdn指出所有传递的数据只有在消息处理程序工作时才是活动的/但是其他消息是什么。答案 0 :(得分:2)
您不应该将指针从进程A传递到进程B,在进程B中,这样的指针(地址)可能指向一些其他结构使用的释放内存或内存。 WM_COPYDATA是在进程之间传递数据的一种方法,你实际上可以将每个消息打包成二进制数组,使用WM_COPYDATA将其发送到其他进程,并在第二个进程中解压缩然后发送给自己解压缩的消息。
在进程之间传递lParam和wPAram的唯一安全方法是它们只包含DWORD数据。