[解決済み] LoadLibraryAと相対パス
2022-03-01 03:03:14
質問
別のDLLから(LoadLibraryAを通して)DLLをロードしようとしています。 これは問題です。
c:\**EXE_DIR**\myExe.exe // this exe load the MY_DLL_N1.dll
c:\**DLLS_DIR**\MY_DLL_N1.dll // this dll load the MY_DLL_N2.dll
c:\**DLLS_DIR**\MY_DLL_N2.dll
- MY_DLL_N1.dllを読み込むと...正常に終了しました。
- MY_DLL_N1.dllはMY_DLL_N2.dll(同じディレクトリ)を(コードの下に)ロードしようとすると...ここに私の問題がある!...。
int LoadMyDLL()
{
// ...
// same path of the MY_DLL_N1.dll ... right?
handle = LoadLibraryA ("MY_DLL_N2.dll");
// ...
}
以上です......何かありましたら、よろしくお願いします。
解決方法は?
handle = LoadLibraryA ("MY_DLL_N2.dll");
パスを指定しないので DLL検索順 が使用されます。この場合、実行ファイルのディレクトリは検索されますが、ロードされるDLLSのディレクトリは検索されません。そのため、DLLを見つけることができません。
いくつかのオプションがあります。
- すべてのDLLSを実行ファイルと同じディレクトリに配置します。
- LoadLibraryを呼び出す際に、DLLのフルパスを渡します。
- 呼び出し SetDllDirectory を使用して、DLLディレクトリを検索パスに追加します。この呼び出しは、最初のDLLをロードする前に、実行ファイルから行ってください。一度これを行えば、最初のDLLをロードする際にフルパスを使用する必要はありません。
異なるアプリケーション間でDLLSを共有する必要がない限り、常にオプション1が好まれます。これにより、読み込んだDLLが正しいものであることを簡単に確認することができます。それは、実行可能なディレクトリが常に最初に検索されるからです。
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】JNI共有ライブラリ(JDK)の読み込みに失敗しました。)
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】'cout'は型名ではない
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++