2012-09-20 18 views
10

私のプロジェクトはFMODを使用してサウンドを再生するスタンドアロンのC++アプリケーションです。以前はVisual Studio 2010で問題なく同じプロジェクトを開発していましたが、2012年には古典的なエラーが表示されます:「fmodex.dllがコンピュータに存在しないため、プログラムを起動できません。 "プロジェクトはDirect3d関連のファイルやd3dシェーダコンパイラなどの他のDLLを正常にロードしているようです。Visual Studio 11 RCでのデバッグ時にDLLの依存関係が見つかりません

問題は、実行可能ファイルをDLLで適切なディレクトリにコピーして手動で実行するのではなく、IDEからプログラムをデバッグまたは実行する場合にのみ発生します。プログラムからFMODへの参照をすべて削除すると、デバッグと実行が正常に動作します。私は、プロジェクト設定で正しい作業ディレクトリを持っていることを確認しました(それと同じディレクトリ内の他のすべてのファイルをロードするだけでなく)。私はもともとVisual Studio 2010からプロジェクトを変換しましたが、無駄なくゼロから新しいプロジェクトを作成しようとしました。私はまた、すべての可能なコンパイラとリンカーの設定を手に入れました、そして、グーグルはどちらかを助けるように見えません。

私はこの問題が新しいMetroスタイルのアプリケーションと関係していると推測しています。それは外部の依存関係を処理する方法ですが、「Metro Style App Support」もオフにしています。私は本当に私ができることすべてを試したと思うし、次に何を試してみるべきか分からない。より多くの診断情報を得るための指示は、同様に高く評価されるだろう!ありがとう!

編集:私が使用している Visual Studioのバージョンは、Visual Studioの究極の2012 RC、バージョン11.0.50706.0 QRELRC 7月、ある2012

+0

を、_haveあなたは依存関係を試してみましたウォーカー_?特に、プロファイリングモード? – MSalters

答えて

16

ゴーDLLの問題でいつものように

PATH=c:\path\where\the\dll-is;$(Path) 
+0

このような音がそれかもしれません!私が仕事から家に帰るときに試してみなければならない! – hhatinen

+0

優秀!それは問題を釘付けにした。ありがとうございました! – hhatinen

+0

これは、デバッガでプログラムを実行させますが、プログラムがDLLを正しく検索していないという問題を解決しません。つまり、他の誰かが、現在のディレクトリを別の場所に設定してプログラムを実行すると、そのディレクトリも失敗します。 (これは、たとえばコマンドプロンプトでプログラムを実行すると一般的です) –

0

それはVSのときに異なるカレントディレクトリでアプリケーションを実行していることもありあなたは手でアプリを実行します。

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

fmodex.dllをロードするコードは、DLLの検索パスにある現在のディレクトリに依存する必要があります。これは大きなセキュリティ上のリスク(ルックアップ「DLL植え付け」またはDLL「プリロード」) )、いくつかのWindows構成によって積極的にブロックされています。

+0

現在のディレクトリは大丈夫です(プロジェクト設定の作業ディレクトリを意味する場合)。しかし、デバッガが現在のディレクトリからDLLをロードするのを積極的に妨げていると思われるかもしれません。私はfmodex.dllをローカルのSystem32フォルダにコピーするよりも劇的なものを試してみたところ、プログラムはうまく始まったようだ。 – hhatinen

2

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

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

    "... Use PATH, INCLUDE, LIBPATH, and LIB environment variables instead of IDE paths for VC++ builds.

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

    Configuration Properties | Debugging | Environment 
    

    し、次の項目を追加します:プロジェクトのプロパティに

    dumpbin /dependents openssl.exe

Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file openssl.exe

File Type: EXECUTABLE IMAGE

Image has the following dependencies:

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

Summary 

    4000 .data 
    14000 .rdata 
    1000 .rsrc 
    33000 .text 
+0

/useenvスイッチは、VSがプロジェクトをまったく開くことができないように見えます。 F:\ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.Cpp.Common.props(63,3):インポートされたプロジェクト "G:\ build \ CommonConfiguration \ Neutral \ sdk.props "が見つかりませんでした。 宣言のパスが正しいこと、そしてそのファイルがディスク上に存在することを確認します。(Fは、Visual Studioがどこにあるディスクで、プロジェクトがどこにあるGでも、G:\ buildディレクトリはありません)。 – hhatinen

関連する問題