进程间通信——使用WM_COPYDATA消息通信
来源:互联网 发布:程序员学ui 编辑:程序博客网 时间:2024/06/06 07:25
使用SendMessage向另一进程发送WM_COPYDATA消息
发送WM_COPYDATA消息
SendMessage(接收窗口句柄, WM_COPYDATA, (WPARAM)发送窗口句柄, (LPARAM)©Data);
copyData是要发送的数据,类型为COPYDATASTRUCT结构体
typedef struct tagCOPYDATASTRUCT {
ULONG_PTR dwData; //用户定义数据
DWORD cbData; //用户定义数据的长度
PVOID lpData; //指向用户定义数据的指针
} COPYDATASTRUCT, *PCOPYDATASTRUCT;
WM_COPYDATA消息只可以使用SendMessage函数(同步)发送,不可以使用PostMessage(异步)发送。
COPYDATA结构体的实质依然是共享内存,区别是这一片特殊的共享内存由操作系统管理而不用用户手动申请管理。
WM_COPYDATA适合小数据量的进程间通信,大数据量可能造成内存问题,以及界面卡死,因为消息的发送形式是同步的。
发送端
void CSendDlg::OnDataSend()
{
CWnd *pWnd = CWnd::FindWindow(NULL,"接收窗口的标题");
CString sCopyData = "HELLO";
COPYDATASTRUCT cpd;
cpd.dwData = 0;
cpd.cbData = sCopyData.GetLength() + 1;//多加一个长度,防止乱码
cpd.lpData = (void*)sCopyData.GetBuffer(cpd.cbData);
pWnd->SendMessage(WM_COPYDATA,NULL,(LPARAM)&cpd);
}
接收端
声明afx_msg void OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
添加消息映射BEGIN_MESSAGE_MAP(CMainFrame, CCJMDIFrameWnd)
...
...
ON_MESSAGE(WM_COPYDATA, OnCopyData)
...
...
END_MESSAGE_MAP()
BOOL CReceiveDlg::OnCopyData( CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct )
{
AfxMessageBox((LPCSTR)(pCopyDataStruct->lpData));
}
- 进程间通信——使用WM_COPYDATA消息通信
- 【WM_COPYDATA】进程通信——WM_COPYDATA消息
- 进程通信——使用WM_COPYDATA消息通信
- 进程通信——使用WM_COPYDATA消息通信
- 进程通信——使用WM_COPYDATA消息通信
- 进程通信——使用WM_COPYDATA消息通信
- 进程通信——使用WM_COPYDATA消息通信
- 使用WM_COPYDATA消息完成进程间通信
- 使用WM_COPYDATA消息进程间通信
- Windows进程通信——WM_COPYDATA消息
- 进程间通信 2 -- 使用WM_COPYDATA消息进行通信
- Win7 不同进程使用WM_COPYDATA消息通信
- 使用WM_COPYDATA消息通信
- 使用WM_COPYDATA消息通信
- WM_COPYDATA 消息实现进程间通信
- 进程间消息WM_COPYDATA通信示例
- WM_COPYDATA 消息实现进程间通信
- WM_COPYDATA 消息实现进程间通信
- maven学习
- python 模块大全
- Solr之简单测试
- jquery validate 使用手册
- Spring MVC文件上传
- 进程间通信——使用WM_COPYDATA消息通信
- Android---- 获取当前应用的版本号和当前android系统的版本号
- java:常用的集合类
- android中onNewIntent的简单说明
- ext2、ext3与ext4的区别
- oracle enterprise linux 7下安装mysql 5.6
- 安装oracle11g碰到“无法访问临时位置”的问题,
- Convolutional Neural Networks for Visual Recognition 7
- rocketmq的store目录下面可以删除的东西