対象のDLLが存在するのにLoadLibraryが失敗してしまいます。

解決


ゆき  2005-11-24 05:15:21  No: 59758

はじめまして!
VC++を始めて1ヶ月くらいの初心者です。
いろいろ調べてもどうしてもわからなかったので、質問させていただきます。
ちなみに開発環境は以下のとおりです
Windows2000
VC++ 6.0

質問内容ですが
DLLを明示的リンクでロードしたいのですが、ロードしたいDLLファイルをexeのあるフォルダにいれてあるのに、LoadLibraryが失敗してしまします。
別の環境(windowsXP)で実行した時は、正常にロードできたのですが、環境を変えるとロードに失敗してしまうようになりました。
ちなみにフルパスにしてもダメでした。

HMODULE hLib = LoadLibrary("PRC.DLL");
if (!hLib) {
  fprintf(stderr, "Error loading PRC.DLL: %d\n", GetLastError());
  exit(1);
}

なにか少しでもアドバイスをくださると非常にありがたいです。
よろしくお願いします。


YuO  2005-11-24 06:23:20  No: 59759

せっかくGetLastErrorを調べているのですから,
その値を元に調査してみればどうですか?

VC++にはエラー検索ツールが付属していますし,
そうでなくてもNETコマンドのサブコマンドHELPMSGで調べることができます。


ゆき  2005-11-24 06:52:36  No: 59760

アドバイスありがとうございます。
そういうツールがあることを知りませんでした・・・
本当にすみません。

いちおうエラー検索ツール、NETコマンドで調べても
「指定されたモジュールがみつかりません」
と出るだけで、原因がさっぱりわかりません。
ちなみに エラーコードは126でした。

何かロードが失敗する要因となりそうなことってありますか?


シャノン  2005-11-24 07:23:57  No: 59761

RPC.DLL は、他の DLL に暗黙リンクしていませんか?
簡単に言えば、RPC.DLL は、動作するために他の DLL を必要としていませんか?  ということですが。
RPC.DLL があっても、RPC.DLL の動作に必要な他の DLL がなければ、LoadLibrary は失敗します。


ゆき  2005-11-24 08:12:07  No: 59762

ご指摘のとおり他のDLLに暗黙的にリンクしてました。
無事に解決しました。

DLLが他のDLLをリンクしているということを知りませんでした。
勉強になりました。

YuO  さん
シャノン  さん
本当にありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加