2011-06-29 18 views
3

私はヘッダファイルに次のようにX.DLLがあるとします。DLLが複数回リンクされている場合、エクスポートされたグローバル変数はどうなりますか?

extern __declspec(dllexport) int foobar; 

このfoobarグローバル変数が実装ファイルにX.DLL内で定義されています

int foobar = 1; 

は今、私は2つのDLLを持っていると仮定、A.DLLおよびB.DLLX.DLLにリンクされている)、およびA.DLLおよびB.DLL

を使用するアプリケーション E.EXEこの状況では
  +----> A.DLL ----+ 
      |    | 
E.EXE ----+    +----> X.DLL 
      |    | 
      +----> B.DLL ----+ 

A.DLLB.DLL内で評価されたときに同じ値を持つことが保証表現&foobarfoobarのアドレス)はありますか?言い換えれば、X.DLLのグローバル変数が2回格納されているか、またはプロセス全体でfoobarというインスタンスが1つしかありませんか?また、DLLがロード時にまたはLoadLibraryへの呼び出しによってリンクされている場合は、違いがありますか?

私もGCCのdocumentation for dllimportにこの文で混乱している:この属性を使用する

一つの欠点はdllimportとしてマーク変数へのポインタが一定のアドレスとして使用することができないということです。

私は、前述の状況を考慮して、その声明の意味を理解していません。

答えて

2

コピーは1つのみです。しかし、一般的に、これを行うことは非常に悪い考えであり、多くの問題に遭遇します。

関連する問題