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

ssh*_*ssh 3 delphi inter-process-communicat wm-copydata

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

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

  2. Receiver处理命令并使用一些结果字符串修改COPYDATASTRUCT,这些结果字符串必须发送回发送方并退出事件处理程序

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

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

Dar*_*con 6

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


OnT*_*Fly 5

请考虑阅读文档.备注部分规定了以下规则:

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