を呼び出すとLoadLibrary("foo.dll")
、システムのさまざまな場所が検索され、最適なものが選択され、そのライブラリが読み込まれます。実際にロードする前に、このファイルへのフルパスを見つけたいと思います。これを行う簡単な方法はありますか?私のgoogle-fuはこれまでのところ失敗しましたが、これを行うための機能が直感的に見えるようです。私の現在の解決策は、実際にフラグLoadLibraryEx
を使用して呼び出し、次に結果を呼び出すことです。この後、このフラグなしでライブラリを解放してリロードする必要があると思いますが、これは回り道のようです。より良い方法はありますか?多分?LOAD_LIBRARY_AS_DATAFILE
GetModuleFileName
ResolvePathFromDllName
1 に答える
を使用できますが、後でSearchPath
実際に呼び出すことを計画している場合は、お勧めしません (間違った結果を返す可能性については、リンクされたページのセクションを参照してください (この回答で以下に引用されています))。LoadLibrary
Remarks
LoadLibrary
また、検索の開始時に、 に記載されているのと同じ推定を行わないため、検索順序が の場合とは少し異なることにも注意してくださいLoadLibrary
。PATH
ドキュメントに記載されているように、厳密に検索します。同じフォルダーで自動的に最初に検索されるわけではありません。の段落を参照してくださいRemarks
。
出力の使用目的がLoadLibrary関数の呼び出しである場合、.dll ファイルを検索する方法としてSearchPath関数を使用することはお勧めしません。これにより、 SearchPath関数の検索順序がLoadLibrary関数で使用される検索順序と異なるため、間違った .dll ファイルが検索される可能性があります。.dll ファイルを見つけて読み込む必要がある場合は、LoadLibrary関数を使用します。
したがって、この質問に対する適切な答えLoadLibrary
は、最初に (そのままで) を使用して、後でロードする同じ DLL を見つけていることを確認することです。