随笔-4  评论-40  文章-117  trackbacks-0
 



一般来说,动态链接库在内存中只会加载一次

 

每个进程需要调用到次动态链接库的时候,都会从这一个内存地址中加载

 

但,如果进程需要改动动态链接库中的信息,哪怕是全局变量,系统也会从内存中重新分配出一小块区域,来进行这些变量的存储

那么与之对应的,每一个进程,所修改的动态链接库,只能是自己的一份,不能在所有进程中共享的

 

如果想在所有进程中共享一份动态链接库数据,则需要在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 李阳 阅读(987) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理