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

关于C#中实现两个应用程序消息通讯的问题 最近项目中需要在两个应用程序之间通讯,这里的两个程序是在一台机器上,看了csdn上的一篇文章《如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据》,原理是讲清楚了,但使起来很不爽,决定自己封装一下,满足项目需要就行。 注意这里发送消息的函数: public static void SendMessage(string destProcessName, int msgID, str 阅读详情

绪:跨进程数据交互方式可以使用多种方式,比如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数据没有改变

07-进程间通信 进程间通信 阅读详情

相关推荐

进程间使用copydata完成通信

进程间通信最简单的方式就是发送WM_COPYDATA消息。 发送WM_COPYDATA消息: SendMessage(接收窗口句柄, WM_COPYDATA, (WPARAM)发送窗口句柄, (LPARAM)&CopyData); 其中的CopyData为COPYDATASTRUCT结构类型,该结构定义如下: typedef struct tagCOPYDATASTRUCT { DWORD dwData; // Specifies data to be passed to the receiving application. DWORD cbData; //Specifies the size, in bytes, of the data pointed to by the lpData member. PVOID lpData; // Pointer to data to be passed to the receiving application. can be NULL. } COPYDATASTRUCT, *PCOPYDATASTRUCT; 接收WM_COPYDATA消息: 只要用COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT*)lParam;就可以了。接收方应认为这些数据是只读的。 由于发送方在接收方处理WM_COPYDATA消息完毕前都是处于等待中,所以接收方应当尽快处理WM_COPYDATA消息。 本资源中user1需要先发送,携带有主窗口句柄,然后recv根据窗口句柄回复,详情见代码

进程的通信 - WM_COPYDATA

在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。其中使用向另一进程发送消息是一种比较经济实惠的方法。通信需要将传递的消息封装在结构体中,在消息传递函数时作为lParam参数传递为自定义数据,按照自己习惯设置就好,不影响对象的传输;表示传递数据的大小(以字节为单位表示传递的数据,是一个void*类型使用时要用而不能使用PostMessage,因为SendMessage是的,会等待消息响应窗体处理消息完毕后再返回;

qq_54169998的博客 4441

Molflow新手必看:Facet基础操作全解析(从2D建模到3D拉伸)

本文为Molflow新手提供了Facet基础操作的全面解析,涵盖从2D图形创建到3D模型拉伸的完整流程。详细介绍了Facet作为几何建模基石的核心概念、顶点编辑、布尔运算以及拉伸、放样等关键操作,并深入讲解了如何为其配置物理参数以实现真空系统的蒙特卡洛模拟。

prometheus9mon的博客 417

利用COPYDATASTRUCT传递命令行参数给驻留内存的进程(SendMessage应用)

我们知道Window进程之间通过API的SendMessage方法传递消息。但是方法参数lParam是Long型,那么如果传递一个字符串(譬如命令行参数)应该怎么办呢,甚至一个对象、结构呢。VB的发送接收需要通过传递指针实现(换言之是字符串的内存地址),下面总结VB方式、C#方式各自如何实现消息的发送与接收;各自是可以互换的,譬如C#发送的消息,VB窗口可以收到;相反亦可以。当然同种语言之间更加没问

bbaojji的专栏 2613

【BLE系列-第六篇】GATT解析:属性、特征、描述符的逻辑关系

本文系统介绍了BLE协议中的ATT和GATT机制。ATT以"属性"为基本数据单元,包含UUID、Handle、权限和Value四个要素。GATT则在ATT基础上构建了服务、特征和描述符的层次结构:服务(UUID:0x2800/0x2801)通过声明属性标识,特征声明(UUID:0x2803)指向特征值(UUID:0x2Axx或自定义),描述符(UUID:0x2900~0x290F)提供附加信息。GATT复用ATT发现机制,通过定义特定UUID语义实现服务发现和特征管理。这种设计使BLE设

qq_43399763的博客 1929

海康线扫相机平场矫正教程

1、白纸准备确保视野中有一张平整且无折痕的白纸,使其完全铺满相机的整个视野。2、行高设置将行高参数设定为 2048。3、灰度值控制相机端图像的灰度值应维持在 120 - 160 这个区间内。同时,最亮像素点与最暗像素点的灰度值差值不得超过 4 倍。在调整灰度值时,尽量开启增益功能。4、 图像模糊处理为减少白纸对平场矫正的影响,需将相机端获取的图像进行模糊化处理。具体操作是对镜头进行虚焦,使整体图像变得模糊。

T 2752

进程通信之一 使用WM_COPYDATA C++及C#实现

原文地址:http://blog.youkuaiyun.com/morewindows/article/details/6804157 进程间通信最简单的方式就是发送WM_COPYDATA消息。本文提供C++及C#程序相互通信的二种实现方式。这样消息的接收端可以用C++实现,发送端可以用C++或C#实现。   发送WM_COPYDATA消息: SendMessage(接收窗口句柄,

wuqiyinglang的专栏 1166

基于MATLAB/Simulink的四旋翼无人机PID控制与仿真(3)

《基于MATLAB/Simulink的四旋翼无人机PID控制与仿真》的第三篇,将为大家继续展示并完善控制与仿真模型。本文将在前文的基础上,完成控制环节增补、参数设置、测试等工作,在不考虑性能(低超调、快、准等)的前提下,保证系统对于一般输入(阶跃、斜坡)的响应稳定性。

jlx142857的博客 9321

使用WM_COPYDATA消息在C++和C#程序之间互传数据

【网通】点击此处下载源程序                         【电信、网通】点击此处下载源程序 【网通】点击此处下载演示程序                     【电信、网通】点击此处下载演示程序 【下载说明】 1、单击上面这个地址,打开下载页面。 2、点普通下载--等待30秒--点“下载”按钮--保存 点击此处查看原文 C#发送和接收程序如上图

apk508 4755

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 162

从服务器到桌面超算:当3999美元的NVIDIA DGX Spark装上Ubuntu,普通开发者能玩出什么花?

DGX Spark的出现,标志着AI算力正在经历从"数据中心集中供给"到"个人桌面按需拥有"的范式转移。它让开发者可以在本地完成从数据预处理、模型微调到推理验证的全流程,只有在需要大规模训练时才调用云端资源。迭代速度:从按小时计费的云端调试,变成随时随地的本地实验数据主权:敏感信息永不离开本地成本可控:一次投入,长期使用,不受API调用次数限制AI算力民主化的时代,真的来了。你的下一台超级计算机,不必在云端。它就在你的桌面上,安静地等待着你的下一个创意。附录:实用资源。

QQ_778132974的博客 616

C#和C++之间通过WM_COPYDATA相互传递数据结构

C#和C++之间通过WM_COPYDATA相互传递数据结构  前言:今天真心忍不住要写这篇博客了,原因很简单,前几天在做这方面的通信,调试了好久,各种bug,也是第一次在C#和C++之间通过SendMessage传递数据结构,不知道怎么弄,去度娘了几十篇博客,要么就是文不对题,要么就是残章断句,要么就是互相copy,越看越烦,问题也一时半会儿解决不了,于是冷静下来想想,再好好找找,果然找到了一片

__Always的专栏 1万+

第3版•系统集成项目管理工程师(中级) │ 第12章 执行过程组 ✦ 管理沟通

🥏第3版•系统集成项目管理工程师(中级) │ 第12章 执行过程组 ✦ 管理沟通

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

使用WM_COPYDATA消息进行C++进程和C#进程发送结构体

【代码】使用WM_COPYDATA消息进行C++进程和C#进程发送结构体。

A_water_的博客 406

基于FDTD的涡旋光束发射器设计

为实现涡旋光束在小型设备中的应用,提出一种圆柱孔光栅蚀刻硅微环谐振腔结构,器件半径仅为4.1μm。建立一个理论模型,利用偶极子点表示沿微环腔内壁的光栅元件散射辐射,推导输出光场表达式,建模结果验证该结构可在不同波长下选择性地产生各种拓扑数的涡旋光束。此外,对器件进行性能分析与参数优化,结果表明,微环波导宽度过小会大大增加微环的辐射损耗。当微环波导宽度为450nm、耦合间距为100nm时,1 579nm波长附近的谐振峰输出功率为16.3dB,Q值为15 800。

qq_61890005的博客 827

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

进程通信之一 使用WM COPYDATA C++及C 实现

进程通信之一 使用WM COPYDATA C++及C 实现

ffygvf的博客 241

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++ WM_COPYDATA 实现进程通信

完整工程可以到:http://download.youkuaiyun.com/detail/zy_dreamer/5385153 下载 基于MFC 用于存储数据的自定义结构体: struct MSG_STRUCT { wchar_t msg[256]; }; 发送端,发送按钮响应事件的代码: void CSendWM_COPYDATADlg::OnBnClickedSendmessage(...

KIDOTHIEF的博客 581

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

如何用WM_COPYDATA跨进程传递窗口句柄

要使用 WM_COPYDATA 跨进程传递窗口句柄, 可以按照以下步骤进行: 在发送方进程中创建一个 COPYDATASTRUCT 结构体,并将要发送的窗口句柄存储在其中。 我们首先检查传递的数据大小是否为窗口句柄的大小,以确保正确提取数据。然后我们可以使用传递的窗口句柄来执行任何需要与该窗口交互的操作。

qq_55914897的博客 611

进程通信之一 使用WM_COPYDATA C++及C#实现 z

原文地址:http://blog.youkuaiyun.com/morewindows/article/details/6804157 进程间通信最简单的方式就是发送WM_COPYDATA消息。本文提供C++及C#程序相互通信的二种实现方式。这样消息的接收端可以用C++实现,发送端可以用C++或C#实现。 发送WM_COPYDATA消息: SendMessage(接收窗口句柄, WM_C...

afeyfre41671的博客 101

【小沐学C++】C++实现进程通信(WM_COPYDATA,MFC,C#)

1、简介 当应用程序将数据传递给另一个应用程序时发送此消息。 This message is sent when an application passes data to another application. 应用程序必须使用SendMessage函数来发送此消息,而不是PostMessage函数。传递的数据不得包含指向接收数据的应用程序无法访问的对象的指针或其他引用。在发送此消息时,所引用的数据不得被发送进程的另一个线程更改。 接收应用程序应将数据视为只读。在个人通讯装置参数仅该消息的处理过程中是有

爱看书的小沐 2898

在Windows MFC\C++编程中的WM_COPYDATA是什么,工作原理是什么,有什么作用,如何来使用它?

WM_COPYDATA 是一种非标准但广泛使用的Windows消息,它允许一个应用程序向另一个应用程序的窗口发送数据。虽然 WM_COPYDATA 不是Windows API中正式定义的标准消息之一,但Windows操作系统确实支持并处理这个消息,使得它成为在不同应用程序之间安全传递数据的一种流行方式。

学无止尽,谨言慎行! 1018

C++进程通信实现-----WM_COPYDATA消息

工作中碰到了32位dll和64位dll通信问题,上网搜索了相关的问题,发现最简单的实现方式就是利用WM_COPYDATA消息传递,很多博客给出了实现代码,但大部分都是发送端C++,接收端C#或MFC。本文给出自己实现的简单例子,发送接收相互通信,都是用C++实现。   目录   WM_COPYDATA 消息 代码实现 WM_COPYDATA 消息 An application ...

Mister5ive的专栏 6033

进程通信之一 使用WM_COPYDATA C++及C#实现

进程间通信最简单的方式就是发送WM_COPYDATA消息。本文提供C++及C#程序相互通信的二种实现方式。这样消息的接收端可以用C++实现,发送端可以用C++或C#实现。 发送WM_COPYDATA消息:SendMessage(接收窗口句柄, WM_COPYDATA, (WPARAM)发送窗口句柄, (LPARAM)&CopyData); 其中的CopyData为COPYDATASTRUCT结构类

MoreWindows Blog 3万+
上一篇: mfc 窗体置顶
下一篇: template 类模板 类继承
宇文仲竹
博客等级 码龄16年 360粉丝 236原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值