4

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

  1. 发送方使用 WM_COPYDATA 使用阻塞调用 SendMessge 向接收方发送命令。

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

  3. Receiver 的“SendMessage”函数返回,但 COPYDATASTRUCT 的内容仍然没有改变。

显然,Windows 的消息传递机制没有在两个应用程序之间共享 COPYDATASTRUCT 内存。相反,它正在制作副本。

4

2 回答 2

6

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

于 2012-03-21T00:27:43.400 回答
5

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

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

于 2012-03-21T00:53:03.000 回答