MFC 不同进程间发送带长数据消息(SendMessage)

1、::SendMessage 这是发送消息且挂起,坐等消息处理结束,方能返回值。但发送带数据消息时由于数据比较长,接收不能正确获得,导致程序获取数据失败不能正常执行,处于这个原因,找到了一个发送数据拷贝事件的宏WM_COPYDATA,就当起了长数据传送到目的句柄(窗口句柄)职责。

发送消息代码

COPYDATASTRUCT cpd;                     // 给COPYDATASTRUCT结构赋值
cpd.dwData = 0;
cpd.cbData = sProjectName.GetLength();
cpd.lpData = (void*)sProjectName.GetBuffer(cpd.cbData);
long lret = ::SendMessage(pMainFrame->m_hWnd, WM_COPYDATA, 0, (LPARAM)&cpd);

接收消息代码

//.h 函数声明
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);

//.cpp 函数定义
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//消息装载
	ON_WM_COPYDATA()
END_MESSAGE_MAP()

BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CString msg;
	msg = (LPSTR)pCopyDataStruct->lpData;
	msg = msg.Left(pCopyDataStruct->cbData);

	/*CString csMsg;
	csMsg.Format("成功接到信息 %s", msg);
	MessageBox(csMsg);*/

	return CFrameWnd::OnCopyData(pWnd, pCopyDataStruct);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值