2016-04-04 26 views
3

32ビットアーキテクチャを使用しているMicrosoft Visual Studio 2013でC#XNAゲームプロジェクトを実行しています。 実行時にDllImportタグを使用してアンマネージC++ DLLをロードしようとすると、以下のエラーが発生します。このDLL(fmod_event.dllは)/ fmoddesignerapi/API/C++のランタイムインポートに失敗したC++アンマネージDLL

下型 'System.DllNotFoundException' の未処理の例外がありますFMOD Ex Programmer’s APIから来ていることに注意してください。
追加情報:指定されたモジュールが見つかりませんでした。:DLL「fmod_event」ロードできません(HRESULTからの例外:0x8007007E)

コードが続き、輸入時に失敗しましたれます。

[DllImport("fmod_event")] 
private static extern RESULT FMOD_EventSystem_Create(ref IntPtr eventsystem); 

私はdllをプロジェクトのルートディレクトリに追加し、 'それより新しい場合はコピー'に設定しました。私は、このdllが正しい場所のDEBUGとRELEASEのbinフォルダに存在することを保証することができます。

同じダウンロードファイルを介して利用可能と/ APIの下にある「fmodex.dll」をインポートする場合/私は同じ問題に遭遇していないとすべてが次のコードで期待通りに動作します:

[DllImport("fmodex")] 
private static extern RESULT FMOD_System_Create(ref IntPtr system); 

これらのdllの両方は、同じbinフォルダーの下に表示されます。
私はfmod_event.dll 32と64を幸運にも使用することを試みました。

1つのDLLが正しくロードされているが、他のDLLがロードされていない理由については、誰でも知ることができますか?ありがとう

+0

** fmod_event.dll **のインポートは何ですか?これらの2つのDLLが** Debug **または** Release **フォルダにすぐに配置されていることを確認できますか?なぜそれらを子フォルダにコピーする必要がありますか? – MickyD

+0

あなたはこのサイトを見たことがありますかhttp://www.solvusoft.com/en/files/missing-not-found-error/dll/windows/electronic-arts-inc/crysis/fmod-event-dll/ – PaulF

+1

私は傾向があります未知のソースからDLLをダウンロードしないでください。 – caubry

答えて

1
  • は、そのファイルがPATHに存在することを確認し、または依存するモジュールは、このDLLには存在しないことをDllImport
  • チェックで完全なパスを指定する拡張子
  • として.DLLを指定します。 Dependency Walkerを使用して、依存DLLが存在し、ロード可能かどうかを調べます。
  • 32ビットと64ビットの問題をチェックします。 32ビットプロセスで64ビットDLLをロードすることはできません。逆も同様です。
+0

これは非常に奇妙ですが、修正しました。私は実際にfmod_eventの.DLLを指定しなければなりませんでした。しかし、それは他のDLLの影響を受けていないようです。ありがとう:) – caubry

-1

通常、すべてのアンマネージDLLは登録が必要です。 fmod_event.dllがインストールパッケージに含まれていない場合は、regsvr32を実行して登録してください。

+0

"アンマネージドDLL"がCOMサーバーでない場合 – MickyD

+0

アンマネージド/ネイティブDLLがCOMであり、誰かがCOMを使用してそれを使用していない限り、そうではありません。 – Ajay

+0

さらに、モジュールに 'DllRegisterServer'エクスポートが含まれているので** regsvr32 **が機能したとしても、それはCOMサーバーなので、** DllImport **は必要ありません。 COMを使用するだけです。まれに、モジュールにはCOMサーバであることに加えて一連のエクスポートが含まれています – MickyD

関連する問題