我正在尝试在Delphi中的两个Windows应用程序之间进行通信。发件人使用WM_COPYDATA通过SendMessage发送命令。那部分工作正常。接收方是否可以在同一个呼叫中回复一些结果字符串?这对我来说是失败的,现在正在发生的事情。
发件人使用WM_COPYDATA使用阻止调用SendMessge向Receiver发送命令。
Receiver处理命令并修改COPYDATASTRUCT,其中包含一些必须发送回发件人并退出事件处理程序的结果字符串
Receiver的“SendMessage”函数返回但COPYDATASTRUCT的内容仍未更改。
显然,Windows的消息传递机制不在两个应用程序之间共享COPYDATASTRUCT内存。相反,它正在复制。
答案 0 :(得分:6)
WM_COPYDATA
正如它所说的那样:它将数据从源进程复制到目标进程。它不会将数据从目标进程复制回源进程。如果您想要双向通信,请向另一个方向发送另一条消息。
答案 1 :(得分:5)
请考虑阅读documentation。备注部分规定了以下规则:
接收应用程序应将数据视为只读。该 lParam参数仅在处理消息期间有效。 接收应用程序不应释放引用的内存 lParam的。如果接收应用程序必须在之后访问数据 SendMessage返回,它必须将数据复制到本地缓冲区。