一般來說,動態(tài)鏈接庫在內(nèi)存中只會加載一次
每個進(jìn)程需要調(diào)用到次動態(tài)鏈接庫的時候,都會從這一個內(nèi)存地址中加載
但,如果進(jìn)程需要改動動態(tài)鏈接庫中的信息,哪怕是全局變量,系統(tǒng)也會從內(nèi)存中重新分配出一小塊區(qū)域,來進(jìn)行這些變量的存儲
那么與之對應(yīng)的,每一個進(jìn)程,所修改的動態(tài)鏈接庫,只能是自己的一份,不能在所有進(jìn)程中共享的
如果想在所有進(jìn)程中共享一份動態(tài)鏈接庫數(shù)據(jù),則需要在DLL中設(shè)置一個共享的 “段”。
以下代碼是定義一個節(jié)并給節(jié)命名為MySec,HWND g_hWnd=NULL;為將放在節(jié)中的數(shù)據(jù)
#pragma data_seg("MySec")
HWND g_hWnd=NULL;
#pragma data_seg()
注意:但是放在 MySec 段中的變量必須要被初始化。飛走而編譯器就會將該變量放到 MySec 段以外
的其他段中。
僅定義一個數(shù)據(jù)段還不能達(dá)到共享數(shù)據(jù)的目的,還要告訴編譯器該段的屬性,有兩種方法可以實現(xiàn)該目的(其效果是相同的),一種方法是在.DEF文件中加入如下語句:
SETCTIONS
MySec READ WRITE SHARED
另一種方法是在項目設(shè)置鏈接選項中加入如下語句:
/SECTION:shareddata,rws
RWS:r為讀,w為寫,s為共享
或者 使用一種更方便的方法,直接將連接器開關(guān)嵌入到 dll 的源代碼中。
#pragma comment(linker,"/section:MySec,RWS")
posted on 2009-04-04 13:58
李陽 閱讀(1126)
評論(0) 編輯 收藏 引用 所屬分類:
C++