进程间传递数据
来源:互联网 发布:珠海淘宝托管 编辑:程序博客网 时间:2024/05/16 06:04
1. 通过消息传递
向另外一个进程发送数据经常用到WM_SETTEXT,但缺点是对方必须有接收对象,如果接收程序是控制台程序就比较麻烦了。这里讨论通过WM_COPYDATA。
自定义消息也是进程间通信的一种方法,其携带的参数如果是数字则没有问题,如果是指针则因为进程间的‘壁垒’而导致对方接收的指针无效。WM_COPYDATA可以避免这个问题。注意它只能用SendMessage()而不能用PostMessage()。
(1)发送方
HWND hwnd=::FindWindow(NULL,"Receiver");
if(hwnd==NULL)
{
AfxMessageBox("没有找到接收窗体");
return;
}
CString msgedit;
GetDlgItem(IDC_EDIT1)->GetWindowText(msgedit);
COPYDATASTRUCT data = {0};
data.dwData = (DWORD)this->GetSafeHwnd();
data.cbData = msgedit.GetLength();
data.lpData = msgedit.GetBuffer(msgedit.GetLength());
::SendMessage(hwnd, WM_COPYDATA, (WPARAM)this->GetSafeHwnd(), (LPARAM)&data);
(2)接收方
程序需响应WM_COPYDATA消息。MFC程序中可以通过Class Wizard进行响应。VC可以通过重载消息响应函数响应。主要是3处:
1)消息映射:
BEGIN_MESSAGE_MAP(CReceiverDlg, CDialog)
//{{AFX_MSG_MAP(CReceiverDlg)
ON_WM_COPYDATA()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2)函数声明:
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
3)函数主体:
BOOL CDataMsgClientDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
char msgdata[256]={0};
DWORD size= pCopyDataStruct->cbData;
CopyMemory(msgdata,pCopyDataStruct->lpData,size);
msgdata[size]='\0';
GetDlgItem(IDC_EDIT1)->SetWindowText(msgdata);
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
2. 共享内存
3. 邮槽
4. 剪切板
5. 命令行
- 进程间传递数据
- 进程间传递数据
- Parcel_进程间数据传递
- 进程间如何传递数据
- 进程间如何传递数据
- Parcel_进程间数据传递
- MFC - 进程间传递消息数据
- Android BitTube进程间数据传递
- Android BitTube进程间数据传递
- 进程间通过WM_COPYDATA传递数据
- 进程外组件 数据传递 指针传递
- 进程之间的数据传递
- 多进程和数据传递
- WM_COPYDATA 在不同进程间传递数据方式之一
- WM_COPYDATA 进程间传递数据(以字符串为例)
- 进程间应用system.out和system.err传递数据
- 进程间数据传递时要注意的地方
- Service服务进程间通讯&Parcelable传递复杂数据
- JSON数据编码解码技术
- 多媒体代码、标签及属性
- CoreData 简单的查询、修改 无监听
- jQuery通用对话框
- DM8148 摄像头采集 显示 识别测试 一
- 进程间传递数据
- MFC原创教程:从不会开始(对话框1)
- linux背景图片
- The underlying connection was closed错误
- NSPredicate 基本使用
- DM8148 摄像头采集 显示 识别测试 二
- 人生路上不可获却的友情
- UIViewController的生命周期以及加载,卸载循环
- JavaSE第七十三讲:异常详解