2

を使用しVS2008てプロジェクトをビルドするときは、独自の を使用しますDLL。モードでは問題なく動作しreleaseますが、モードに変更するとdebugエラーが発生します。

An unhandled exception of type 'System.DllNotFoundException' occurred in DDKWidget.exe

追加情報:Unable to load the DLL "DDKLibA.dll": The specified module could not be found.

DDKWidgetとは、私のDDKLibA.dllプロジェクトの実行可能ファイルであり、自分で作成しDLLた . で作成DLLしましC++たが、 を使用してC#プロジェクトで使用してい[DllImport("DDKLibA.dll")]ます。

OSWin7 64 bit
IDEVS2008 SP1

誰かが以前にこれに遭遇しましたか?
ところで、しばらく前はすべて問題ありませんでしたが、最近、を再インストールしてOSから、これらのエラーが発生し始めました。誰でも私を助けることができますか?

4

3 に答える 3

1

これは、64 ビットと 32 ビットのミスマッチの問題のように思えます。デフォルトでは、CLR アプリケーションは「AnyCPU」用にコンパイルされます。これは、64 ビット OS 上で 64 ビット プロセスとして自動的に実行されることを意味します。

一方、C++ dll は 32 ビットまたは 64 ビット用にコンパイルする必要があり、一度コンパイルするとそのままになります。

64 ビット OS でも C# アプリを強制的に 32 ビット モードで実行できますが、その設定はデバッグ構成とリリース構成で個別に変更できます。

私の推測では、C++ dll は 32 ビットとしてコンパイルされ、C# dll のデバッグ設定も 32 ビットですが、リリース モードでは AnyCPU に設定されています。そうすれば、64 ビット プロセスとして実行され、32 ビット C++ dll をロードできなくなります。

于 2012-09-18T02:34:34.560 に答える
0

これが発生するのを私が見たのは、依存DLLが欠落しているときだけです。たとえば、アセンブリのリリースバージョンはfoo.dllに依存していますが、デバッグバージョンはfoo-debug.dllに依存しています。foo-debug.dllがターゲットシステムにインストールされていない場合、アセンブリのデバッグバージョンをロードできません。

FileMonなどのファイル監視ユーティリティを使用して、DLLのロード時にOSがロードしようとしているファイルを確認することをお勧めします。

于 2012-09-18T02:26:51.317 に答える
0

ファイルシステムのどこにdllがありますか? リリース exe と同じディレクトリにコピーしたのに、デバッグ exe に同じことをするのを忘れたのではないでしょうか?

于 2012-09-18T02:23:50.110 に答える