3

私は持っていA.DLLますB.DLL

A.DLLVS 2010 を使用して、プロジェクトの C++ 関数にブレークポイントを設定し、procexp.exeを使用して現在読み込まれている DLL を確認しました。明らかに、A.DLLロードされています。

B.DLLこの関数から呼び出す必要があります。注:B.DLLにはライブラリ依存関係がありA.DLLます。このライブラリはA.LIB

を使用してLoadLibrary、次のステートメントを実行します。

HANDLE hLib = LoadLibrary("B.DLL");

この行が実行された後、procexp.exeをもう一度確認します。A.DLL2回ロードされます!! A.LIBへの依存関係を削除するとB.DLL、これは発生しません。A.DLLProcess Explorer は、 の 2 つのインスタンスが異なるベース アドレスを持っているため、実際には異なるモジュールであると報告しています。

私の質問は、なぜこれがの別のインスタンスをロードするのA.DLLですか? A.DLLすでにロードされていることに気付くことは可能ですか?

4

1 に答える 1

0

そのため、 が 2 回読み込まれた理由A.DLLがわかりませんでした。そのため、先に進んでコードを再構築し、より良い解決策を考え出しました。(これは私にとってはうまくいきました)

B.DLLへのライブラリ依存関係を持つ代わりに、A.DLLその依存関係を削除し、エクスポート可能な関数を を通じて公開する代わりに、この関数A.LIBに を使用し、function pointerLoadLibrary、GetProcAddress などへの呼び出しを通じてそれを渡しました。

そうすることで、A.DLL2回ロードされることはなく、すべて問題ありません:)

于 2013-04-26T13:40:14.170 に答える