网传了很多关于MFC的进程间通信的方法,本人也进行了模仿和学习,有一点心得:
在发送消息的进程中需要将数据结构打包传递时如下设置:
void Cos_160112Dlg::OnBnClickedOsdlgSendmsgBtn()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItem(IDC_OSDLG_SENDMSG_EDIT)->GetWindowText(strContent);
if (strContent != _T(""))
{
UpdateData();
CWnd *pWnd = FindWindow(NULL, _T("os_recv_160112"));
//第二参数为接受消息窗口名,可以在接受窗口初始化时设置SetWindowText(_T("os_recv_160112"));
if (pWnd)
{
COPYDATASTRUCT cpd;
cpd.dwData = 0;
cpd.cbData = 2 * strContent.GetLength() + 1;//此处是重点,必须是长度的两倍+1,否则接受端数据接收不全,已测试
cpd.lpData = (void*)strContent.GetBuffer(cpd.cbData);
pWnd->SendMessage(WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)&cpd);
strContent.ReleaseBuffer();
}
}
}
接收端程序和网上的方式一样,首先添加WM_COPYDATA消息响应函数
在函数体中添加如下代码
BOOL Cos_recv_160112Dlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* p