无意间翻到了以前写的一点笔记,觉得挺有意思的,就随手整理了一下。
环境: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了。