0

比如我刚刚调用了GetMessage(或者我在CallWndMsg钩子回调中),得到了lParam和wParam。

可以使用 SendMessage 或 PostMessage 将此消息重新发送到使用刚刚收到的 lParam 和 wPAram 的其他进程的窗口,而无需深度处理。我的意思是如果这些参数(通常包含复合结构的指针)在重新发送期间仍然有效,或者我可能会遇到内存违规问题(或类似问题)?如果我能做到,系统如何决定何时可以释放和删除 lPAram 和 wPAram?

PS 似乎我不能对 WM_COPYDATA 执行此操作,因为 msdn 指出所有传递的数据仅在消息处理程序工作时才有效/但其他消息如何。

4

1 回答 1

2

您不应将指针从进程 A 传递给进程 B,在进程 B 中,此类指针(地址)可能指向已释放的内存或某些其他结构使用的内存。WM_COPYDATA 是在进程之间传递数据的一种方式,您实际上可以将每个消息打包成二进制数组,使用 WM_COPYDATA 将其发送到其他进程,然后在第二个进程中将其解包,然后将解包后的消息发送给自己。

在进程之间传递 lParam 和 wPAram 的唯一安全方法是当它们只包含 DWORD 数据时。

于 2013-06-24T19:28:07.143 回答