2016-12-23 5 views
-1

を返し、失敗しました:のLoadLibraryが思うエラーコード127

  1. を私はA.EXEという名前の実行可能ファイルを、持っている、それはパスにあります:PathA。
  2. A.exe loadlibrary B.dll、B.dll loadlibrary C.dll。
  3. B.dllがパス:PathBにあります。 C.dllはPathAとPathBの両方にコピーを持っています。

私の質問です:A..dllがB.dllを読み込むとき、C..dllのどのパスがB.dllによって読み込まれるのですか?

私の状況では、C.dllは、1つが_cdeclで、もう1つが_stdcallであるなど、何か異なるものがあります。 PathAのc.dllを削除すると、A.exeはB.dllを正常にロードできます。しかし、PathAのc.dllが存在する場合、それは失敗します。

+2

シナリオでは 'PathA \ C.dll'がロードされます。 'LoadLibrary'は、どの特定のモジュールがそれを呼び出すのかを知ることができません。 EXEのディレクトリのみが検索パス上にあります。 'LoadLibrary'のドキュメンテーションは、探索アルゴリズムを詳細に記述します(セキュリティの意味があります)。 –

+0

はい、あなたは正しいです。そして、デバッグ後、PathA \ c.dllが存在しない場合、PathB \ c.dllをロードします。すべては、loadlibraryの検索戦略に関するものです。ご協力ありがとうございました! – lwiu

答えて

0

PathAのC.dllは、あなたの作業パスがA.exeのパスであるためにロードされていると思います。そして、種類の_cdecl dllはおそらくあなたはそれを動的にロードします。