一般来说,动态链接库在内存中只会加载一次
每个进程需要调用到次动态链接库的时候,都会从这一个内存地址中加载
但,如果进程需要改动动态链接库中的信息,哪怕是全局变量,系统也会从内存中重新分配出一小块区域,来进行这些变量的存储
那么与之对应的,每一个进程,所修改的动态链接库,只能是自己的一份,不能在所有进程中共享的
如果想在所有进程中共享一份动态链接库数据,则需要在DLL中设置一个共享的 “段”。
以下代码是定义一个节并给节命名为MySec,HWND g_hWnd=NULL;为将放在节中的数据
#pragma data_seg("MySec")
HWND g_hWnd=NULL;
#pragma data_seg()
注意:但是放在 MySec 段中的变量必须要被初始化。飞走而编译器就会将该变量放到 MySec 段以外
的其他段中。
仅定义一个数据段还不能达到共享数据的目的,还要告诉编译器该段的属性,有两种方法可以实现该目的(其效果是相同的),一种方法是在.DEF文件中加入如下语句:
SETCTIONS
MySec READ WRITE SHARED
另一种方法是在项目设置链接选项中加入如下语句:
/SECTION:shareddata,rws
RWS:r为读,w为写,s为共享
或者 使用一种更方便的方法,直接将连接器开关嵌入到 dll 的源代码中。
#pragma comment(linker,"/section:MySec,RWS")
posted on 2009-04-04 13:58
李阳 阅读(1048)
评论(0) 编辑 收藏 引用 所属分类:
C++