2011-06-29 44 views
3

假設我有一個頭文件中的以下一個X.DLL多次鏈接DLL時導出的全局變量會發生什麼?

extern __declspec(dllexport) int foobar; 

foobar全局變量裏面X.DLL在實現文件則規定:

int foobar = 1; 

現在假設我有兩個DLL ,A.DLLB.DLL,其鏈接到X.DLL,以及使用A.DLLB.DLL的應用E.EXE

  +----> A.DLL ----+ 
      |    | 
E.EXE ----+    +----> X.DLL 
      |    | 
      +----> B.DLL ----+ 

在這種情況下,是保證內部A.DLLB.DLL評估時具有相同的值的表達式&foobar(的foobar地址)?換句話說,X.DLL的全局變量存儲了兩次,還是在整個過程中只有一個foobar實例?另外,如果DLL在加載時或通過調用LoadLibrary進行鏈接,它會有所作爲嗎?

我也被這句話在GCC的documentation for dllimport困惑:

使用這個屬性

一個缺點是,一個指向標爲dllimport一個變量不能作爲常量地址。

考慮到我上述的情況,我不太瞭解該陳述的含義。

回答

2

只有一個副本。但是,一般來說,這樣做是一個非常糟糕的主意,你會遇到很多問題。

相關問題