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

解決


ゆき  2005-11-23 20:15:21  No: 59758  IP: 192.*.*.*

はじめまして!
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-23 21:23:20  No: 59759  IP: 192.*.*.*

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

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

編集 削除
ゆき  2005-11-23 21:52:36  No: 59760  IP: 192.*.*.*

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

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

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

編集 削除
シャノン  2005-11-23 22:23:57  No: 59761  IP: 192.*.*.*

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

編集 削除
ゆき  2005-11-23 23:12:07  No: 59762  IP: 192.*.*.*

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

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

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

編集 削除