私はヘッダファイルに次のようにX.DLL
があるとします。DLLが複数回リンクされている場合、エクスポートされたグローバル変数はどうなりますか?
extern __declspec(dllexport) int foobar;
このfoobar
グローバル変数が実装ファイルにX.DLL
内で定義されています
int foobar = 1;
は今、私は2つのDLLを持っていると仮定、A.DLL
およびB.DLL
(X.DLL
にリンクされている)、およびA.DLL
およびB.DLL
:
E.EXE
この状況では
+----> A.DLL ----+
| |
E.EXE ----+ +----> X.DLL
| |
+----> B.DLL ----+
、A.DLL
とB.DLL
内で評価されたときに同じ値を持つことが保証表現&foobar
(foobar
のアドレス)はありますか?言い換えれば、X.DLL
のグローバル変数が2回格納されているか、またはプロセス全体でfoobar
というインスタンスが1つしかありませんか?また、DLLがロード時にまたはLoadLibrary
への呼び出しによってリンクされている場合は、違いがありますか?
私もGCCのdocumentation for dllimportにこの文で混乱している:この属性を使用する
一つの欠点は
dllimport
としてマーク変数へのポインタが一定のアドレスとして使用することができないということです。
私は、前述の状況を考慮して、その声明の意味を理解していません。