利用消息机制实现进程通信

来源:互联网 发布:html5书籍推荐 知乎 编辑:程序博客网 时间:2024/06/01 20:56

消息是Windows操作系统提供的一种驱动机制,利用消息进行进程通信,就是使用消息激活某种操作的过程,对于进程间的通信,一般采用用户自定义的消息来完成,也可以使用Windows定义的WM_COPYDATA消息来共享数据。

下面的代码实现了两个对话框窗口类(CSendDlg和CReceiveDlg),一个用于接收数据消息,一个用于发送数据消息。

(1)发送数据

void CSendDlg::OnBtnSend()
{
 // TODO: Add your control notification handler code here
 UpdateData(true);
 CWnd *pWnd=CWnd::FindWindow(NULL,_T("Receive"));
 if(pWnd==NULL)
 {
  MessageBox("寻找接收窗口失败!");
  return;
 }
 COPYDATASTRUCT cpd;
 cpd.dwData=0;
 cpd.cbData=m_send.GetLength();
 cpd.lpData=(void *)m_send.GetBuffer(cpd.cbData);
 pWnd->SendMessage(WM_COPYDATA,NULL,(LPARAM)&cpd);
}

(2)接收数据

LRESULT OnReceive(WPARAM wParam,LPARAM lParam); //改行添加到头文件中

ON_MESSAGE(WM_COPYDATA,OnReceive) //只要添加这一行进行WM_COPYDATA消息映射

LRESULT CReceiveDlg::OnReceive(WPARAM wParam,LPARAM lParam)
{
 COPYDATASTRUCT *p = NULL ;
 p = (COPYDATASTRUCT*)lParam;
 memcpy(m_receive.GetBuffer((int)p->cbData),p->lpData,p->cbData);
 m_receive.ReleaseBuffer();
 UpdateData(false);
 return 0;
}

原创粉丝点击