MFC使用WM_COPYDATA消息进行进程间的通讯

一、介绍

Windows上MFC应用程序可使用WM_COPYDATA可以完成两个进程之间的通讯。
当一个应用向另一个应用传送数据时,发送方需调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需响应WM_COPY DATA消息,双方就实现了数据共享。
它在底层实际上是通过文件映射来实现的,它的缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。

二、发送端界面与代码示例

MFC使用WM_COPYDATA消息进行进程间的通讯

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();
    }
}

三、接收端界面与代码示例

MFC使用WM_COPYDATA消息进行进程间的通讯

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);
}

四、效果

MFC使用WM_COPYDATA消息进行进程间的通讯

 参考链接:

https://blog.csdn.net/tercel_zhang/article/details/49056037

https://www.cnblogs.com/betterwgo/p/8441452.html

上一篇:winform界面测试(进阶版)


下一篇:WM_CONCAT长度超过4000问题