在VC++ 6.0下利用消息实现内部进程通讯 (转)

在VC++ 6.0下利用消息实现内部进程通讯 (转)[@more@] 信息产业部电子第二十二研究所 郎锐   内部进程间通讯和数据 交换有多种方式:消息、共享 内存、匿名(命名)管道、邮槽、 windows套接字等多种技术。其中利用消息机制实现IPC虽然同其他方法相比有交换的数据量小、携带的信息少等缺点,但由于其实现方便、应用灵活而广泛应用于无须大量、频繁数据交换的内部进程通讯 系统之中,尤其是对于在上层主控 软件与底层工作软件之间的命令与响应上更能充分显示其良好的 性能。本文就通过编制一个主控软件和一个受其操作的底层工作软件来阐述如何用VC++6.0通过消息来实现内部进程通信。 一、Windows消息机制 Windows是一种面向 对象的体系结构,Windows环境和应用 程序都是通过消息来交互的。Windows应用程序开始 执行后,Windows为该程序创建一个"消息队列(message queue)",用以存放邮寄给该程序可能创建的各种不同窗口的消息。消息队列中消息的结构(MSG)为: typedef struct tagMSG{ HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; D word time; POINT pt; }MSG; 其中第一个成员变量是用以标识接收消息的窗口的窗口句柄;第二个参数便是消息标识号,如WM_PAINT;第三个和第四个参数的具体意义同message值有关,均为消息参数。前四个参数是非常重要和经常用到的,至于后两个参数则分别表示邮寄消息的时间和光标位置(屏幕坐标)。把消息传送到应用程序有两种方法:一种是由系统将消息"邮寄(post)"到应用程序的"消息队列"这是"进队消息" win32 api有对应的 函数:    PostMessage(),此函数不等待该消息处理完就返回;而另一种则是由系统在直接 调用窗口函数时将消息"发送(send)"给应用程序的窗口函数,属于"不进队消息"对应的函数是SendMessage()其必须等待该消息处理完后方可返回。   二、主控程序的实现 (1)新建一工程 文件:Sender,选取MFC AppWizard(exe)。 (2)第二步选取Single document(单文档)。 (3)其余几步均为确省值。 (4)添加三个菜单"命令一"、"命令二"、"命令三"及与之对应的函数: OnSendComm1() { CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,0,0); } OnSendComm2() { CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,0,1); } OnSendComm3() { CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,1,0); } (5)在SenderView.h中添加自定义消息:#define WM_COMM WM_USER+100编译完成即可。   三、底层工作程序的实现 (1)新建工程Receiver、仍是单文档。 (2)在CReceiverApp类的InitInstance()函数末尾添加: m_pMainWnd->SetWindowText("Receiver"); 用以指定底层工作程序的窗口标题,以便主控程序能根据标题获取到此窗口的窗口句柄。 (3)在MainFrm.h中添加自定义消息:#define WM_COMM WM_USER+100。 (4)添加自定义消息WM_COMM的消息映射: BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) // NOTE - the ClassWizard will add and remove map ping macr os here. // DO NOT EDIT what you see in these blocks of generated code ! ON_WM_CREATE() //}}AFX_MSG_MAP ON_MESSAGE(WM_COMM,OnSendMsg) END_MESSAGE_MAP() (5)完成消息响应函数OnSendMsg() void CMainFrame::OnSendMsg(WPARAM wParam, LPARAM lParam) { if(wParam==0 && lParam==0) AfxMessageBox("主控程序发送命令一!"); if(wParam==0 && lParam==1) AfxMessageBox("主控程序发送命令二!"); if(wParam==1 && lParam==0) AfxMessageBox("主控程序发送命令三!"); } 我们便可以通过辨别消息的两个消息参数来区分主控程序发送的是哪一个命令从而可以执行相应的操作。执行主控程序和底层工作程序由于本程序采用的是SendMessage()所以当主控程序发送消息给底层工作程序时,底层工作程序弹出响应的 模式对话框,在没有关闭对话框前此消息未处理完,SendMessage()也就没有执行完,所以主控程序呈阻塞状态,如改用PoseMessage()则不会发生阻塞,具体选用哪个函数还应根据实际要求灵活掌握。   结论: 通过上面的实例可以看出利用消息进行进程间通信不失为一种便捷的方法,进程间的数据交换量不大却能完成相当的功能,上下层次有着明显的接口,上层和底层只通过这个接口进行通讯,因此只要对上下层程序制定好规范详尽的 协议便可编制出协调性很好的软件控制系统。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-989988/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-989988/

VC++利用消息机制两个EXE程序间通信 VC++利用消息机制两个EXE程序间通信,在发送端发送消息,终端可以即时监听并接收到消息,然后给出提示。通过本程序可了解一些程序间数据交换的相关技巧。 立即下载

相关推荐

VC++进程间相互通信的十一种方法

  进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:  一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方  另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏

蜡笔小辛的专栏 1426

VC++6.0下运用消息完成内部进程通讯(IPC)

摘要:内部进程通讯和数据交换有多种方式:消息、共享内存、匿名(命名)管道、邮槽、Windows套接字等多种技术。其中利用消息机制实现IPC虽然同其他方法相比有交换的数据量小、携带的信息少等缺点,但由于其实现方便、应用灵活而广泛应用于无须大量、频繁数据交换的内部进程通讯系统之中,尤其是对于在上层主控软件与底层工作软件之间的命令与响应上更能充分显示其良好的性能。本文就通过编制一个主控软件和一个受其操

jiangxinyu的专栏 1000

VC++ 6.0利用消息实现内部进程通讯

VC++ 6.0利用消息实现内部进程通讯 信息产业部电子第二十二研究所 郎锐  

就是要去飞翔…… 1378

VC6.0利用消息实现内部进程通讯

内部进程通讯和数据交换有消息、共享内存、匿名(命名)管道、邮槽、Windows套接字等多种技术。其中利用消息机制实现IPC虽然同其他方法相比有交换的数据量小、携带的信息少等缺点,但由于其实现方便、应用灵活而广泛应用于无须大量、频繁数据交换的内部进程通讯系统之中,尤其是对于在上层主控软件与底层工作软件之间的命令与响应上更能充分显示其良好的性能。本文就通过编制一个主控软件和一个受其操作的底层工作软件

ark1111的专栏 1134

VC 6.0利用消息实现内部进程通讯

引言 内部进程通讯和数据交换有消息、共享内存、匿名(命名)管道、邮槽、Windows套接字等多种技术。其中利用消息机制实现IPC虽然同其他方法相比有交换的数据量小、携带的信息少等缺点,但由于其实现方便、应用灵活而广泛应用于无须大量、频繁数据交换的内部进程通讯系统之中,尤其是对于在上层主控软件与底层工作软件之间的命令与响应上更能充分显示其良好的性能。本文就通过编制一个主控软件和一个受其操作的底层工...

weixin_34007020的博客 200

编程高手:VC 6.0利用消息实现内部进程通讯

引言  内部进程通讯和数据交换有消息、共享内存、匿名(命名)管道、邮槽、Windows套接字等多种技术。其中利用消息机制实现IPC虽然同其他方法相比有交换的数据量小、携带的信息少等缺点,但由于其实现方便、应用灵活而广泛应用于无须大量、频繁数据交换的内部进程通讯系统之中,尤其是对于在上层主控软件与底层工作软件之间的命令与响应上更能充分显示其良好的性能。本文就通过编制一个主控软件和一个受其操作的底层

328

VC++ 6.0利用共享内存、消息实现内部进程通讯

键词: 共享内存、WINDOWS用户自定义消息、同步、同机通讯 摘 要: 通过实例,介绍了如何利用共享内存方式和windows自定义消息实现两个进程的同机通讯 一、 引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换. 内部进程通讯(即:同机通讯...

weixin_30468137的博客 170

VC++6.0下基于UDP的实时语音通讯系统实现与优化

网络编程与实时音频处理是构建低延迟通讯系统的核心技术基础。其原理在于通过UDP协议的无连接特性,以牺牲部分可靠性为代价换取极低的传输延迟,这对于实时语音、视频流等场景至关重要。在技术价值层面,深入理解底层API(如Winsock和Waveform Audio)能帮助开发者掌握数据从采集、编码、网络传输到解码播放的全链路流程,从而具备优化系统性能、排查复杂问题的能力。本文以经典的VC++6.0开发环境为例,详细剖析了如何实现一个完整的实时语音对讲工具,涵盖了音频采集(waveIn/waveOut)、GSM 6

weixin_33798152的博客 498

[VC++]MFC使用WM_COPYDATA消息进行进程间的通讯

MFC使用WM_COPYDATA消息进行进程间的通讯本代码实现了WM_COPYDATA数据的传递及参数(WPARAM)(LPARAM)的接收,尤其是如何接收WPARAM消息,本示例给出了接收代码。 一、介绍 Windows上MFC应用程序可使用WM_COPYDATA可以完成两个进程之间的通讯。 当一个应用向另一个应用传送数据时,发送方需调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需响应WM_COPY DATA消息,双方就实现了数据.

1415
上一篇: 怎样在VC++中访问和修改注册表 (转)
下一篇: iczelion tut24 (转)
csd3176
博客等级 码龄11年 20粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值