残念ながら、これはかなり自由形式の質問になりますが、私は気が遠くなり、アドバイスを求めたいと思いました。
これは、Visual Studio2008SP1を使用するVisualC++MFCアプリです。
同僚と私は両方ともOffice2007をインストールしていましたが、それ以来、アプリで奇妙なDLLの読み込みの問題が発生しました。具体的には、LoadLibraryはDLLの1つ(最初にロードするDLL)のロードに失敗し、エラーコード126(モジュールが見つかりません)を返します。本当に奇妙なのは、Windowsエクスプローラーから実行可能ファイルを実行するだけで正常に動作することです。
私は問題を診断するために通常の手順を実行しました。
- ファイルが存在し、現在の作業ディレクトリがそのファイルを指していることを確認します。
- 依存関係ウォーカーを実行し、依存関係が正しく読み込まれていることを確認します。この質問が失敗しても大丈夫だと言っているものを除いて、それらはすべて正常にロードされています。
- コード内の同じ場所にいくつかの異なるDLLをロードしてみてください。単純な「スタブ」dllのいくつかは成功しますが、ほとんどは失敗します。
- 別々のテストアプリから失敗しているDLLをロードしてみてください-空のコンソールアプリとベアボーンMFCアプリでは、すべてのDLLが正常にロードされています!
- LoadLibraryExとLOAD_LIBRARY_AS_DATAFILEフラグを使用してDLLをロードしてみてください。これは成功しますが、依存関係の問題である可能性があることを指摘する以外は、それほど遠くはありません。
この時点で他に何をすべきか本当にわかりません。私が言ったように、Office 2007は私たちの問題の一般的なスレッドですが、それがどのような問題を引き起こす可能性があるのかわかりません。次に何をすればいいのかわからない。何か案は?
編集:現在の作業ディレクトリが何らかの理由でDLLパスにないことはかなり確信しています。失敗しているDLLは、他のDLLを必要としているようです。ローダースナップのデバッグ出力をオンにすると、現在の作業ディレクトリがDLLの読み込みパスにないように見えます。これを引き起こす可能性のあるアイデアはありますか?
edit2:現在のビルドは、実行可能ファイルを作業ディレクトリ以外のディレクトリにダンプしました。何らかの理由で、DLLをロードしようとしたときに別のDLLをロードしようとすると、現在の作業ディレクトリが検索されなくなりました。ロードしようとしているすべてのDLLを含むディレクトリに実行可能ファイルを配置することで、問題は解決します。これらすべてとローダースナップによる出力に基づいて、これはVisual Studioの奇妙なバグであると98%確信しており、単に回避する必要があります。