一、介绍
Windows上MFC应用程序可使用WM_COPYDATA可以完成两个进程之间的通讯。
当一个应用向另一个应用传送数据时,发送方需调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需响应WM_COPY DATA消息,双方就实现了数据共享。
它在底层实际上是通过文件映射来实现的,它的缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。
二、发送端界面与代码示例
void CclientDlg::OnBnClickedButtonSend() { // TODO: 在此添加控件通知处理程序代码 CString strMsg; GetDlgItem(IDC_EDIT_SendData)->GetWindowText(strMsg); CWnd* serverWnd = CWnd::FindWindow(NULL, L"server"); if (serverWnd) { COPYDATASTRUCT cpd; cpd.dwData = 0;//用户定义的数据类型,可以用来作为发送标志 cpd.cbData = (strMsg.GetLength() + 1) * sizeof(TCHAR);//数据大小,加1表示\0,长度一定要满足 cpd.lpData = (void*)strMsg.GetBuffer(cpd.cbData); //数据指针 LRESULT copyDataResult = ::SendMessage(serverWnd->GetSafeHwnd(), WM_COPYDATA, NULL, (LPARAM)&cpd);//发送消息 strMsg.ReleaseBuffer(); } }
三、接收端界面与代码示例
BOOL CserverDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) { // TODO: 在此添加消息处理程序代码和/或调用默认值 LPCTSTR lstrMsg = (LPCTSTR)(pCopyDataStruct->lpData); CString strMsg(lstrMsg); GetDlgItem(IDC_EDIT_ReceiveData)->SetWindowText(strMsg); return CDialogEx::OnCopyData(pWnd, pCopyDataStruct); }
四、效果
参考链接:
https://blog.csdn.net/tercel_zhang/article/details/49056037
https://www.cnblogs.com/betterwgo/p/8441452.html