MFC使用WM_COPYDATA消息進行進程間的通訊


一、介紹

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() * sizeof(TCHAR);//數據大小,長度一定要滿足,否則數據傳輸不全
        cpd.lpData = (void*)strMsg.GetBuffer(cpd.cbData); //數據指針
        LRESULT copyDataResult = ::SendMessage(serverWnd->GetSafeHwnd(), WM_COPYDATA, NULL, (LPARAM)&cpd);//發送消息
        strMsg.ReleaseBuffer();
    }
}

三、接收端界面與代碼示例

在對話框界面,右鍵對話框->屬性,選擇消息選項卡,添加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);
}

四、效果與代碼下載

代碼下載地址: https://download.csdn.net/download/rcg714786690/12406356

 

參考鏈接:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM