所以DLL 中的變數scope 也僅限於使用 (link到) 該DLL 的exe 檔而已。
所以說..link 同一個DLL的兩個exe檔,無法藉由那個DLL來溝通。
因為每一個exe 檔有自己的DLL空間。
但是... 還是有辦法的.. 就是在DLL中增加一個share data 區塊。
宣告在share 區塊的variable 會是所有link 該dll 的exe檔都共用的。
宣告的方式:
在 c code 中:
#pragma data_seg(".shared")宣告出一個區域,然後在DLL的def 檔中,宣告該 .shared 區段是 share:
共用變數區- 宣告時一定要初始化。否則無效。
#pragma data_seg()
SECTIONS
.shared READ WRITE SHARED
msdn 說明的地方在 http://msdn2.microsoft.com/en-us/library/h90dkhs0(VS.80).aspxmsdn中說明得很清楚。
- 有一堆variable 不會被放到share segment,即使你宣告在那裡也沒用,
- 還有要注意一件事,因為DLL mapping 到每一個exe檔的virtual address 並不相同,所以不可能share pointer。
- 還有.. process 的 HANDLER 只對該process有用,所以放在share seq,讓另一個exe 存取的話,會有意外的情況。
- c++ 的class 和 static variable 也別想,在class load時,該variable 會被re-initialize,造成混亂。
沒有留言:
張貼留言