win32简单的实现进程间通信(传送文本数据)
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-11-23 09:45:20
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
进程之间通讯的几种方法:
在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有
使用内存映射文件
通过共享内存DLL共享内存
使用SendMessage向另一进程发送WM_COPYDATA消息
比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据:
用到的消息、结构、函数
这个函数的原型及其要用到的结构如下:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;//用户定义数据
DWORD cbData;//数据大小
PVOID lpData;//指向数据的指针
}COPYDATASTRUCT;
发送数据时的参数
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,WM_COPYDATA对应的十六进制数为0x004A
wParam建议设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:
发送数据
char copystr[] ="这里是要传送的文本" ; CopyData.dwData = 1;//这个是自定义数据随意填 CopyData.cbData = strlen(copystr);//发送数据的大小 CopyData.lpData = (char*)copystr;//指向数据的指针 ::SendMessage(g_pHwnd, WM_COPYDATA, 0, (LPARAM)&CopyData);
接收数据
接收数据要处理 WM_COPYDATA 消息,在这个消息里处理
COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT*)lParam; char *c=(char*)pCopyData->lpData;//这个就是要取的文本啦