【转】VC 利用DLL共享区间在进程间共享数据及进程间广播消息
1、http://blog.csdn.net/morewindows/article/details/6702342
在进程间共享数据有很多种方法,剪贴板,映射文件等都可以实现,这里介绍用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查看段的详细信息,如下图:

2、
3、
4、
5、
【转】VC 利用DLL共享区间在进程间共享数据及进程间广播消息的更多相关文章
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案
C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...
- VC++共享数据段实现进程之间共享数据
当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...
- 进程间通信 - 动态链接库中共享内存(利用DLL的2~3G的地址段空间)
前言 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据,以及其他的一些资源组成.32位系统的进程分配4G的虚拟地址空间.内存地址范围是0x00000000-0xFFFFFF ...
- DLL入门浅析(5)——使用DLL在进程间共享数据
转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/21/90734.html 在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的 ...
- 使用DLL在进程间共享数据
0x01 DLL在进程间共享数据理论 1.可以在Dll中使用#pragma data_seg建立共享类型的数据段将需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享,从而实现不 ...
- 【C++】DLL内共享数据区在进程间共享数据(重要)
因项目需要,需要在DLL中共享数据,即DLL中某一变量只执行一次,在运行DLL中其他函数时该变量值不改变:刚开始想法理解错误,搜到了DLL进程间共享数据段,后面发现直接在DLL中定义全局变量就行,当时 ...
- VC++动态链接库(DLL)编程深入浅出(zz)
VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...
- VC++动态链接库(DLL)编程深入浅出(转帖:基础班)
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...
- VC-基础:VC++动态链接库(DLL)编程深入浅出
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静 ...
随机推荐
- 栈的压入和弹出序列(剑指Offer)
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一 ...
- STM32L476应用开发之六:电池SOC检测(转)
源: STM32L476应用开发之六:电池SOC检测
- 如何使用 lsyncd 实时同步并执行 shell 命令
修改 lsyncd 的默认配置,不直接执行rsync 进行同步,而是改用自己的脚本. binary 指定我们的脚本 vim /usr/local/lsyncd/etc/lsyncd.conf sett ...
- 基于SSL的MySQL主从
master 端 配置CA和证书 [root@baseos-1_192.168.31.140 ~]# cd /etc/pki/CA/ #生成根证书的私钥 [root@baseos-1_192.168. ...
- 同级div设置display:inline-block,父级div强制不换行
同级div设置display:inline-block,父级div强制不换行 <html> <head></head> <body> <div i ...
- Xcode project 设置相关
FauxPas 这是一款Mac平台的用于检查Xcode项目的辅助工具 ,可以帮助我们找出常见的错误.隐藏的bug.不良实践以及可维护性问题和风格问题. 一, $(SRCROOT) :当前工程所在的目 ...
- CentOS6.8下安装Redis
1.由于Redis是使用C语言开发的,安装时需要对Redis的源码进行编译,编译依赖gcc环境,如果没有gcc,需要先安装gcc: yum install gcc-c++ 2.安装完成后,进入Redi ...
- topcoder srm 688 div1 -3
1.给出一个只包含'(',')'的字符串$s$,现在对它进行若干次如下操作使其变成匹配的括号串(每次操作包含3个步骤):(1)选择 $L,R,L\leq R$;(2)将$L,R$之间的字符翻转:(3) ...
- strerror函数的总结【转】
本文转载自:https://www.cnblogs.com/xrcun/p/3210889.html 定义函数:char * strerror(int errnum); 函数说明:strerror() ...
- centos6配置网络常见问题
1. 启用网卡 查看网卡模块: lsmod 移除网卡:modprobe -r e1000 装载网卡: modprobe e1000 2. 配置网络 vim /etc/sysconfig/network ...