c++ CopyData 使用结构体 - 跨进程

9 篇文章 0 订阅
本文介绍了如何使用Windows API中的CopyData结构体进行进程间通信,详细展示了如何封装并发送int、字符串及结构体数据。通过示例代码,解释了接收方如何解析不同类型的数据,并探讨了数据修改后的同步问题。
摘要由CSDN通过智能技术生成

绪:跨进程数据交互方式可以使用多种方式,比如socket,本地文件,windows环境下自带的sendmessage之CopyData消息

这里只设计CopyData数据的封装处理

首先是简单的int数据
 

发送:

int i_value = 1;
			COPYDATASTRUCT data;   
			data.dwData = 1000; 
			data.cbData = sizeof(i_value);
			data.lpData = &i_value;
			::SendMessage(toWnd, WM_COPYDATA, (WPARAM)fromWin, (LPARAM)&data);

其次是字符串

发送:
std::string param = "1";
			COPYDATASTRUCT data;     
			data.dwData = 2000; 
			data.cbData = param.length();
			data.lpData = &param[0];
			::SendMessage(toWnd, WM_COPYDATA, (WPARAM)fromWin, (LPARAM)&data);

再次是结构体

结构体
	struct Tis {
				int cmd;
				std::string data= "1";
			};
发送:
			Tis param;
			param.cmd = 1; 
			COPYDATASTRUCT data;   
			data.dwData = 3000; 
			data.cbData = sizeof(param);
			data.lpData = &param;
			::SendMessage(toWnd, WM_COPYDATA, (WPARAM)fromWin, (LPARAM)&data);

最后处理接收

接收: 
switch(pCopyDataStruct->dwData)
{
case 1000:
     printf("%d",pCopyDataStruct->lpData);
break;
case 2000:
{
  LPCTSTR lstrMsg = (LPCTSTR)(pCopyDataStruct->lpData);
	CString strMsg(lstrMsg);
	printf(strMsg);
}
break; 
case 3000:
{
			auto dt = reinterpret_cast<Tis*>(pCopyDataStruct->lpData); 
			printf("%d--%s", dt.cmd, dt.data);
}break;
}

结:通过copydata可以实现进程之间的复杂的数据信息传递

问:copydata依赖sendmessage发送内存数据,为什么B进程修改dt.data的数据修改后A进程的param.data数据没有改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值