使用WM_COPYDATA进行跨进程通信(IPC)的一点小体会_IPC

无意间翻到了以前写的一点笔记,觉得挺有意思的,就随手整理了一下。

环境:Win 7 64位 SP1 + Delphi 7

当时写了一个小项目,一个exe,一个dll,互相之间需要“通知”一下,仅仅是通知,不需要传递数据。

本来呢,这个“通知”发出去就行,也不讲求实时,所以准备异步发送,但结果

   PostMessage(h, WM_COPYDATA, 0, 0);

接收方没反应,折腾了很久,汗都下来了,上网搜了搜,说是这个WM_COPYDATA不能玩“异步”,只能SendMessage。。。

为什么呢?我看了看解释,然后。。。然后放弃了,觉得也没必要还不好懂。

行,你不让我Post,怕了你了,那就Send吧,结果又失败了。。。

因为我只是要发个通知而已,并不需要传递什么实际的数据,所以写成了

   SendMessage(h, WM_COPYDATA, 0, 0);

关键是我也没捕获到任何异常和错误,windows你tm的倒是给我来个错误啊!

最后老老实实的,搞了个

var

 CopyDataStruct: TCopyDataStruct;

...

   CopyDataStruct.lpData := PChar(txtSysStatus.Text + #0);

   CopyDataStruct.dwData := WM_COPYDATA;

   CopyDataStruct.cbData := Size;

   SendMessage(h, WM_COPYDATA, 0, Integer(@CopyDataStruct));

终于ok了。