14

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

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

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

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

4

3 に答える 3

24

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

Configuration Properties | Debugging | Environment 

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

PATH=c:\path\where\the\dll-is;$(Path)
于 2012-09-21T05:55:34.983 に答える
2

お悔やみ申し上げます。私は最近 DLL 地獄にいることが多いようです。2 つの提案:

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

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

  2. dumpbin /dependents [*.exe] [*.dll]DLL の依存関係が表示されます。

    dumpbin /dependents openssl.exe

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

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

イメージには次の依存関係があります。

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

Summary

     4000 .data
    14000 .rdata
     1000 .rsrc
    33000 .text 
于 2012-09-21T05:34:50.190 に答える
0

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

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

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

于 2012-09-20T20:25:36.330 に答える