一般來說,動態鏈接庫在內存中只會加載一次
每個進程需要調用到次動態鏈接庫的時候,都會從這一個內存地址中加載
但,如果進程需要改動動態鏈接庫中的信息,哪怕是全局變量,系統也會從內存中重新分配出一小塊區域,來進行這些變量的存儲
那么與之對應的,每一個進程,所修改的動態鏈接庫,只能是自己的一份,不能在所有進程中共享的
如果想在所有進程中共享一份動態鏈接庫數據,則需要在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
李陽 閱讀(1093)
評論(0) 編輯 收藏 引用 所屬分類:
C++