MFC编程->通过WM_COPYDATA实现进程间通信


     由于MSCOMM控件的注册问题,为了加快开发速度,就用上了WM_COPYDATA,很快就实现了进程间通信。

     具体如下:

     先写接收端源码,在三个地方做修改:

1.在头文件做函数声明:

afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
2.在初始化函数里面做绑定

BEGIN_MESSAGE_MAP(CcommtestDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_COPYDATA()
END_MESSAGE_MAP()

3.在文件中定义接收函数

BOOL CCopyDataReceiverDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    if (pCopyDataStruct->cbData > 0)
    {
        char recvData[256] = {0} ;
        strncpy(recvData, (char *)pCopyDataStruct->lpData, pCopyDataStruct->cbData);
        SetDlgItemText(IDC_EDIT_RECEIVE, (char *)recvData);

        Feedback(pWnd);
    }
    
    return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}

再写发送数据源码:

CString strWindowTitle =  _T("ClientDemo");  
    CString strDataToSend = _T("Hello, Everyone fsdfsdfsdfdsfds,this is a test demo!");  
  
    HWND hOtherWnd = ::FindWindow(NULL, strWindowTitle.GetBuffer(0));  
    if (hOtherWnd != NULL && ::IsWindow(hOtherWnd))  
    {  
        COPYDATASTRUCT cpd;  
        cpd.dwData = 0;  
        cpd.cbData = strDataToSend.GetLength() * sizeof(TCHAR);  
        cpd.lpData = (void*)strDataToSend.GetBuffer(0);  
        HRESULT hResult = ::SendMessage(hOtherWnd, WM_COPYDATA, (WPARAM)(AfxGetApp()->m_pMainWnd), (LPARAM)&cpd);  
        strDataToSend.ReleaseBuffer();  
    }  
这样就实现了进程间的数据通信了。

  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值