web-dev-qa-db-ja.com

DLL Visual Studio 11RCでデバッグするときに依存関係が見つかりません

私のプロジェクトは、サウンドの再生にFMODを使用するスタンドアロンのC++アプリケーションです。以前、Visual Studio 2010で同じプロジェクトを問題なく開発しましたが、2012では、「fmodex.dllがコンピューターにないため、プログラムを起動できません。プログラムを再インストールして、この問題を解決してください」という古典的なエラーが発生します。 「」プロジェクトは他のDLL(Direct3d関連ファイルやd3dシェーダーコンパイラなど)を問題なくロードしているようです。

この問題は、IDEからプログラムをデバッグまたは実行しようとした場合にのみ発生し、実行可能ファイルをDLL)を使用して適切なディレクトリにコピーして手動で実行した場合には発生しません。FMODへのすべての参照をから削除した場合プログラム、デバッグ、および実行は正常に機能します。プロジェクト設定に正しい作業ディレクトリがあることを確認しました(他のすべてのファイルが同じディレクトリに正常に読み込まれることを除いて)。最初はVisual Studio2010からプロジェクトを変換しました。しかし、運が悪かったので、新しいプロジェクトを最初から作成しようとしました。また、可能なすべてのコンパイラとリンカーの設定をいじくり回しましたが、グーグルも役に立たないようです。

この問題は新しいMetroスタイルアプリと関係があり、外部の依存関係を処理する方法だと思いますが、「Metroスタイルアプリのサポート」もオフにしました。私は自分ができることはすべて本当に試したと思い始めており、次に何を試すべきかわからない。より多くの診断情報を取得するための指示も大歓迎です!ありがとう!

編集:使用しているVisualStudioのバージョンはVisualStudio Ultimate 2012 RC、バージョン11.0.50706.0 QRELRC 2012年7月です。

12
hhatinen

プロジェクトのプロパティに移動します。

Configuration Properties | Debugging | Environment 

そして、次の項目を追加します。

PATH=c:\path\where\the\dll-is;$(Path)
19
Michael Burr

私の同情、私はDLL地獄に最近住んでいるようです。2つの提案:

  1. /useenvスイッチがあるdevenvを使用して、コマンドラインからIDEを駆動できます。

    "... VC++ビルドのIDEパスの代わりに、PATH、INCLUDE、LIBPATH、およびLIB環境変数を使用します。

  2. dumpbin /dependents [*.exe] [*.dll]はDLL依存関係を表示します。

    dumpbin /dependents openssl.exe

Microsoft(R)COFF/PE Dumperバージョン10.00.40219.01Copyright(C)MicrosoftCorporation。全著作権所有。ファイルopenssl.exeのダンプ

ファイルタイプ:実行可能イメージ

画像には次の依存関係があります。

SSLEAY32.dll
LIBEAY32.dll
WSOCK32.dll
MSVCR80.dll
KERNEL32.dll

Summary

     4000 .data
    14000 .rdata
     1000 .rsrc
    33000 .text 
2
reechard

VSが、アプリを手動で実行する場合とは異なる現在のディレクトリでアプリを実行している可能性があります。

VSは通常、現在のディレクトリをプロジェクトフォルダに設定します。これは通常、ビルドされたバイナリがあるフォルダと同じではありません。手作業で実行する場合、おそらく前者ではなく後者から実行していることになります。

それが問題である場合、fmodex.dllをロードするコードは、DLL検索パスにある現在のディレクトリに依存している必要があります。これは大きなセキュリティリスクになる可能性があります(「DLLの植え付け」の検索または= DLL "pre-loading")であり、一部のWindows構成によってアクティブにブロックされています。

0
Leo Davidson