一、介绍

Windows上MFC应用程序可使用WM_COPYDATA可以完成两个进程之间的通讯。
当一个应用向另一个应用传送数据时,发送方需调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需响应WM_COPY DATA消息,双方就实现了数据共享。
它在底层实际上是通过文件映射来实现的,缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。

二、发送端界面与代码示例

void CclientDlg::OnBnClickedButtonSend()
{
// TODO: 在此添加控件通知处理程序代码 CString strMsg;
GetDlgItem(IDC_EDIT_SendData)->GetWindowText(strMsg); CWnd* serverWnd = CWnd::FindWindow(NULL, L"server");
if (serverWnd)
{
COPYDATASTRUCT cpd;
cpd.dwData = 0;//用户定义的数据类型,可以用来作为发送标志
cpd.cbData = strMsg.GetLength() * sizeof(TCHAR);//数据大小,长度一定要满足,否则数据传输不全
cpd.lpData = (void*)strMsg.GetBuffer(cpd.cbData); //数据指针
LRESULT copyDataResult = ::SendMessage(serverWnd->GetSafeHwnd(), WM_COPYDATA, NULL, (LPARAM)&cpd);//发送消息
strMsg.ReleaseBuffer();
}
}

三、接收端界面与代码示例

在对话框界面,右键对话框->属性,选择消息选项卡,添加WM_COPYDATA消息,如下图

消息函数代码如下:

BOOL CserverDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 LPCTSTR lstrMsg = (LPCTSTR)(pCopyDataStruct->lpData);
CString strMsg(lstrMsg);
GetDlgItem(IDC_EDIT_ReceiveData)->SetWindowText(strMsg); return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}

四、效果与代码下载

代码下载地址: https://download.csdn.net/download/rcg714786690/12406356

参考链接:

https://blog.csdn.net/tercel_zhang/article/details/49056037

https://www.cnblogs.com/betterwgo/p/8441452.html

MFC使用WM_COPYDATA消息进行进程间的通讯的更多相关文章

  1. android 进程间通信 messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯? android 消息机制 进程间 android 进程间 可以用 handler么 messenger 与 handler 机制 messenger 机制 是不是 就是 handler 机制 或 , 是不是就是 消息机制 android messenge

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯 ...

  2. 8.7 进程间的通讯:管道、消息队列、共享内存、信号量、信号、Socket

    进程间的通讯 进程间为什么需要通讯? 共享数据.数据传输.消息通知.进程控制 进程间的通讯有哪些类型? 首先,联系前面讲过的知识,进程之间的用户地址空间是相互独立的,不能进行互相访问,但是,内核空间却 ...

  3. [转]WINDOW进程间数据通讯以及共享内存

    1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同 ...

  4. 进程间的通讯(IPC)方式

    内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据 ...

  5. 【转】C++ 进程间的通讯(一):简单的有名管道实现

    原文: C++ 进程间的通讯(一):简单的有名管道实现 -------------------------------------------------- 进程间的通讯(一):简单的有名管道实现   ...

  6. .Net下的进程间的通讯 -- Windows消息队列

    Windows 消息队列(MSMQ),是微软Windows2000以上的操作系统的一个服务,可以提供在计算机间消息的可靠传输,用来在两个进程间进行异步通讯最合适不过了.在.Net中有一个Message ...

  7. .Net 利用消息在进程间通讯实现进程互操作

    有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据:还有可以使用网络端口实现进程间通讯.共享一片内存区域记录及 ...

  8. python进程间的通讯实现

    1:进程间通讯的方法:apply_async()非阻塞式通讯     apply()阻塞式通讯 2:使用Queue实现对Process创建的进程间通讯, Queue本身是一个消息队列程序,Queue常 ...

  9. 进程间的通讯————IPC

    """ IPC 指的是进程间通讯 之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程 然而 进程内存是物理隔离的 解决方案: 1.将共享数据放 ...

  10. AIDL机制实现进程间的通讯实例

    转载自:http://blog.csdn.net/cjjky/article/details/7562652 ======================================= 在Andr ...

随机推荐

  1. 概率论与数理统计教程(第二版,茆诗松,2010)PDF下载

    概率论与数理统计教程(第二版,茆诗松,2010)PDF下载:共享地址

  2. Solution Set - “也许我们早已经共鸣在那约定之地”

    目录 0.「AGC 024D」Isomorphism Freak 1.「APIO 2018」「洛谷 P4631」选圆圈 2.「UR #2」「UOJ #31」猪猪侠再战括号序列 3.「UR #3」「UO ...

  3. python基础学习4

    打开文件的方式 # 第一种 f = open('C:\project\pycharmprojects\\bigdata33\day05/cars.csv', mode='r', encoding='U ...

  4. c# 无法捕获 System.NullReferenceException?

    ..在VS debug 模式下会"无法捕获" System.NullReferenceException......但是在release 或者外部运行是能捕获的. test cod ...

  5. uni-app无法触发onReachBottom事件

    我们经常会遇见列表; 但是今天却发现下拉的时候: 无法触发onReachBottom事件; 原来是因为列表内容嵌套出现问题: 导致onReachBottom事件无法被触发 记住:列表内容如果是组件:外 ...

  6. IPv6的优势分析

    本文分享自天翼云开发者社区<IPv6的优势分析>,作者:没烦恼 IPv6的优势分析 1.更大的地址空间 IPv6中IP地址的长度为128位,其地址容量则达到了2^128个,远远大于IPv4 ...

  7. jar包启停shell脚本

    jar包控制脚本1 #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_181 export APP_HOME=/u01/test export ...

  8. mac spark+hive+hadoop 数据分析环境搭建(单机简版)

    apache产品下载地址: http://archive.apache.org/dist/ mysql5.6 brew方式安装配置: Icon   mysql做为元数据存储使用. brew searc ...

  9. Luogu P11628 WC2025 猫粮 题解 [ 绿 ] [ 贪心 ] [ adhoc ] [ 鸽巢原理 ]

    猫粮:WC 诈骗题.我竟然能切 WC 的 T3 也是逆天了. 话说切了猫粮能变成猫娘吗 qwq. 思路 首先题目里有下面几点关键的性质: 所有猫粮质量总和等于所有猫要吃的质量总和. 优质的有 \(n\ ...

  10. IGM机器人维修的关键环节

    在现代科技领域,机器人已经成为不可或缺的一部分,它们广泛应用于各个行业,包括制造业.服务业.医疗.科研等.对于任何机器人来说,定期的维护和修理都是必不可少的.这不仅可以确保机器人正常工作,还可以延长其 ...