DLLを読み込めないという問題(解決)
連日 blog に書いてきた問題が解決しました。
要点をまとめると次のようになります。(Visual Studio 2005を使用している場合です)
- 原因を究明するためには、エラーメッセージを丹念に追え。
- カレントディレクトリにDLLを配置したのにDllNotFoundExceptionが発生する場合は、そのDLLが動くために必要な他のDLLが不足している可能性がある。
- 必要なDLLを分析するには Dependency Walker を使えばよい。
- Dependency Walkerは開発したプログラムが動作するターゲット環境で使用すること。これ大切。(開発用のPC上で動かしても意味がない。)
- Dependency Walkerで分析した結果、不足するDLLにMSVCR80D.DLLが含まれている場合、そのDLLはDebugモードでビルドされたもの。Releaseモードでビルドしなおそう。
- MSVCR80D.DLLは再配布禁止なので、ネット上で探してもダウンロードできないはず。
- MSVCR80.DLLが不足している場合は、再配布可能パッケージをインストールすればよい。
- DLL開発時はDLLをテストするためだけの単体プログラムを別途用意しておくこと。
- DebugモードでビルドしたDLLなら単体テストがOKなのに、Releaseモードでビルドすると単体テストがNGになる場合、コンパイラオプションやリンカオプションがReleaseモードでも正しく設定されているか確認する。
- とくに、リンカオプションでモジュール定義ファイルが設定されているか確認すること。
プログラムの動きとしてはまだ不満なところがありますが、DLLが読み込めないという問題に関してはこれで解決できました。
| 固定リンク
コメント