- ベストアンサー
DLLの暗黙リンクの調べ方
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200511/05110055.txt 上記サイトと同じような現象で、loadlibraryが失敗してしまうのですが、「暗黙リンク」っていうものはどう調べたら良いのでしょうか? フルパスにしてもDLLの読込で失敗してしまって困っております。 ちなみに環境は以下の通りです。 WindowsXP VC++ 6.0 まだ初心者なので出来るだけ細かくお願いいたしますm(__)m
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
LoardLibraryしているのに暗黙リンク? リンクしているDLLがまた別のDLLをリンクしてるケースがあるかも。 VC++6.0に確か付属していた Dependency Walker を使えば暗黙リンクしている DLLは確認できます。 動的リンクしているものはソースから調べてください。 (LoadLibraryの引数となっているパスのDLLもDependency Walkerで調べる対象)
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
動的リンクしたDLLの中で、別DLLが暗黙リンクされている場合、それを調べる方法はありません。 暗黙リンクによりDLLが探される場所は、 ・実行中のプロセスの実行形式モジュールがあるフォルダ ・現在のフォルダ ・Windows システム フォルダ ・Windows ディレクトリ ・環境変数 PATH で指定されたフォルダ になります。ここに無ければエラーになります。 従って、暗黙リンクで呼び出されるDLLは、上記のいずれかのフォルダに無ければいけません。 なお「何が理由でloadlibraryが失敗しているか、GetLastError()で調べる」のが鉄則。 GetLastError()の値を見ると「え?それが理由?それならココが悪いに決まってる」って感じで、瞬間的に答えに辿り着ける事が多いです。 >フルパスにしてもDLLの読込で失敗してしまって困っております。 原因を確認せずに「困った困った」って言われたって、こっちが困ります。 あと、まさかとは思うけど、フルパスに"C:\MyProgram\Test2\test.dll"とかって指定してたりはしませんよね? Cでは"C:\\MyProgram\\Test2\\test.dll"って感じで「\記号1個は\\のように\を2つ書く」っての忘れてませんよね?
お礼
ご回答ありがとうございました。また、お礼が遅くなり申し訳ございませんでした。 「Dependency Walker」を使い、足りないDLLがあることが判明いたしました。 本当にありがとうございました。