WM_COPYDATA:接收者可以修改COPYDATASTRUCT内容吗?

时间:2012-03-21 00:24:46

标签: delphi inter-process-communicat wm-copydata

我正在尝试在Delphi中的两个Windows应用程序之间进行通信。发件人使用WM_COPYDATA通过SendMessage发送命令。那部分工作正常。接收方是否可以在同一个呼叫中回复一些结果字符串?这对我来说是失败的,现在正在发生的事情。

  1. 发件人使用WM_COPYDATA使用阻止调用SendMessge向Receiver发送命令。

  2. Receiver处理命令并修改COPYDATASTRUCT,其中包含一些必须发送回发件人并退出事件处理程序的结果字符串

  3. Receiver的“SendMessage”函数返回但COPYDATASTRUCT的内容仍未更改。

  4. 显然,Windows的消息传递机制不在两个应用程序之间共享COPYDATASTRUCT内存。相反,它正在复制。

2 个答案:

答案 0 :(得分:6)

WM_COPYDATA正如它所说的那样:它将数据从源进程复制到目标进程。它不会将数据从目标进程复制回源进程。如果您想要双向通信,请向另一个方向发送另一条消息。

答案 1 :(得分:5)

请考虑阅读documentation。备注部分规定了以下规则:

  

接收应用程序应将数据视为只读。该   lParam参数仅在处理消息期间有效。   接收应用程序不应释放引用的内存   lParam的。如果接收应用程序必须在之后访问数据   SendMessage返回,它必须将数据复制到本地缓冲区。