VC 利用DLL共享区间在进程间共享数据及进程间广播消息
来源:互联网 发布:npm node sass 版本 编辑:程序博客网 时间:2024/05/16 17:53
在进程间共享数据有很多种方法,剪贴板,映射文件等都可以实现,这里介绍用DLL的共享区间在进程间共享数据,及共享数据有变化时及时的反馈给各相关进程。
一.在DLL中设置共享区间
在DLL中是用数据段来实现共享区间的,有了这个共享区间,各进程可以方便的共享数据。
1.先用#pragma data_seg(Name)设置名为Name的数据段。
2.再用#pragma comment(linker, "/SECTION:Name,RWS")设置名为Name的数据段属性。/SECTION就表示为这是一个数据区间,R——Read读,W——Write写,S——Share共享。
如:
const int MAXSTRINGLEN = 1000;
#pragma data_seg("ShareData")
int iTotal = 0;
char szString[MAXSTRINGLEN] = {'\0'};
#pragma data_seg()
#pragma comment(linker, "/SECTION:ShareData,RWS")
要注意数据一定要先初始化,否则无效。再写DLL的导出函数来操作数据如添加字符,得到字符串或直接得到字符串指针。
可以用dumpbin /SUMMARY test001.dll来查看新创建的ShareData区域。如下图:
注意段的名字被截断了,再输入dumpbin /SECTION:ShareDat test001.dll查看段的详细信息,如下图:
二.当共享数据有变化及时的反馈给进程
可以在DLL中写一个句柄数组,每个新进程都将自己的句柄写入,当一个进程修改共享区间的数据时,对句柄数组的每个进程发个消息通知下。更简单的办法是向系统广播消息来通知进程共享数据有变化。
注册消息用RegisterWindowMessage()函数:
UINT RegisterWindowMessage(LPCTSTR lpString);
参数lpString表示注册消息的名称。
函数成功返回0xC000到 0xFFFF的值表示消息(即消息处理函数WndProc()中的UINT message)。失败返回0。
MSDN特别说明——当二个不同的进程用相同的消息名称注册时将会得到同一个值。这样不同的进程就可以收到相同的消息了。
广播消息用PostMessage (),这个函数用的相当频繁就不细说了。将第一个参数设置为HWND_BROADCAST就会向所有窗口(注1)发送消息。在WndProc()中的switch (message)的default:后作下判断就可以了。
if (message == SHAREDATACHANG_MESSAGE)
处理函数
注1: HWND_BROADCAST广播消息的说明:The message is posted to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows. The message is not posted to child windows.
/****************************************************************************************************
转载请标明出处,原方地址:http://blog.csdn.net/morewindows/article/details/6702342
****************************************************************************************************/
- VC 利用DLL共享区间在进程间共享数据及进程间广播消息
- VC 利用DLL共享区间在进程间共享数据及进程间广播消息
- VC 利用DLL共享区间在进程间共享数据及进程间广播消息
- VC 利用DLL共享区间在进程间共享数据及进程间广播消息
- 利用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据
- 使用DLL在进程间共享数据(5)
- Windows中使用DLL在进程间共享数据
- 利用内存映射文件在两个进程间共享数据
- 利用内存映射文件在进程间共享数据
- 利用内存映射文件在进程间共享数据
- DLL在进程中共享数据
- 进程间共享数据
- 进程间数据共享
- JAVA读取系统时间的几种方法
- 最小生成树
- 怎么提高MSSQL Server 2000的安全性
- 关于在windows系统下远程控制mac系统
- AndroidのUI设计研究(一)——自定义ProgressBar
- VC 利用DLL共享区间在进程间共享数据及进程间广播消息
- 10g RAC重建ASM以及相关报错解决
- 如何理解Hadoop-Hbase原理与应用小结
- Python 学习入门(17)—— args, kwargs
- 调用Nero SDK 刻录光盘(含代码)
- unity3D,NGUI中button响应事件实现
- 11gR2启动ASM实例时遭遇ORA-29701
- AAA 及RADIUS协议配置
- 2014 OLTP Memory Database lock 测试