4 使用WM_COPYDATA 消息通信 对于少量数据可以用WM_COPYDATA方便地实现通信
由于SendMessage()是阻塞的,只有接收方响应了消息,SendMessage()才能返回,否则一直阻塞
所以,对于大量数据来说,用SendMessage()就容易造成窗口假死
1 通过WM_COPYDATA 消息实现进程间通信的方法 在Win32中,WM_COPYDATA消息主要目的是允许在进程间传递只读数据
SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据
这个函数的原型如下: SendMessage(WM_COPYDATA,wParam,lParam) 其中wParam设置为包含数据的窗口句柄,lParam指向一个COPYDATASTRUCT的结构,其定义为: typedef struct tagCOPYDATASTRUCT{ DWORD dwData; DWORD cbData; PVOID lpData; }COPYDATASTRUCT; 其中dwData为自定义数据, cbData为数据大小, lpData为指向数据的指针
需要注意的是,WM_COPYDATA消息保证发送的数据从原进程复制到目标进程
但是,WM_COPYDATA消息不能发送HDC、HBITMAP之类的东西,它们对于目标进程来说是无效的
目标进程得到这些数据不能在原进程作任何事情,因为它们属于不同的进程
与其他进程通信方法一样,要实现进程间的数据通信,在发送数据的程序中,首先要找到接收数据进程的窗口句柄pWnd,可以用CWnd::FindWindow(NULL,_ T("DataRecv"))函数来得到,其中字符串"DataRecv"为接收数据的程序名
然后用SendMessage()函数发送数据,其具体的做法见