7.05.2007

share data in DLL

CE 的DLL 在使用上應該當作是code archive (.a)。--- 省略RAM, 和loading 問題不管的話。
所以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")
共用變數區- 宣告時一定要初始化。否則無效。
#pragma data_seg()
宣告出一個區域,然後在DLL的def 檔中,宣告該 .shared 區段是 share:
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,造成混亂。
所以,簡而言之,就是只有plain c variable 可以宣告在那裡..

沒有留言: