2

このようなグローバル変数を定義する静的ライブラリlibStaticがあります

ヘッダファイルlibStatic/globals.h:

extern int globvar;

コードファイルlibStatic/globals.cpp:

int globvar = 42;

DLL libDynamicと実行可能ランナーは、このグローバル変数を使用しています。さらに、libDynamic実行時にランナーLoadLibrary()にリンクされます( 、 、および作品を介しGetProcAddress()て...)

これにより、ランナーのヒープに1回、 libDynamicのヒープにglobvar1回、2回作成されることになることを理解していますが、これはもちろん非常に望ましくありません。

このあたりに良いところはありますか?libDynamicrunnerが同じものを使用していることを確認するにはどうすればよいglobvarですか?

4

1 に答える 1

2

簡単な方法は.DLL、実行可能ファイルのグローバル変数を指すようにすることです。ロードした直後に、そのライブラリ内の特別な関数 (のようなものSetGlobVar(int*)) を呼び出します。そうすれば、ライブラリは常に同じグローバル変数を指します.EXE.

于 2010-05-12T16:19:45.287 に答える