私はc#プロジェクトでc ++ dllを使用していますが、ウィンドウxpマシンで正常に実行されましたが、デバッグプロジェクトをウィンドウ2003サーバー(x64)にコピーすると、以下のエラーが表示されます。この問題は何ですか。どうすれば修正できますか。
ありがとう
"System.DllNotFoundException:ロードできませんDLL 'lib.dll':アプリケーションの構成が正しくないため、このアプリケーションを起動できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。"
CRTdllの検索に問題があるとの不満があります。まず、DLLに必要なマニフェストが含まれていることを確認します。VisualStudioの[ファイル] + [開く] + [ファイル]で、DLL]を選択し、RT_MANIFESTノードが含まれていることを確認します。次の問題は、DLLのデバッグビルドを展開できないことです。これは、CRTのデバッグバージョンに依存するため、ターゲットマシンにインストールできません。
DLLのリリースビルドをデプロイするか、DLLを/ MTオプションでコンパイルして、CRTが静的にリンクされるようにします。プロジェクト+プロパティ、C/C++、コード生成、ランタイムライブラリ。DLLが/ clrオプションを指定してコンパイルされた場合、これは機能しません。
DLL読み込みの問題については、 Dependency Walker ツールを使用することをお勧めします。正確な問題が表示されるため、このような問題に対処するときに役立つことが証明されています。 。
Visual Studio 2005をお持ちの場合は、C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe
にあります。
更新:
MSVCR90D.DLL
は、Visual C++ランタイム9.0のデバッグバージョンです。デバッグ目的でのみ使用してください。 DLL読み込みの問題を回避するために、ライブラリのリリースバージョンをビルドすることを強くお勧めします。ただし、デバッグバージョンを絶対にデプロイする必要がある場合は、必要なすべてのDLLがC:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86
にあります。 。
Lib.dllは32ビットDLLですか? C#プログラムはx64でネイティブに実行されますが、32ビットDLLをロードできません。 C#プロジェクトのターゲットCPUを「x86」に変更して、WOW64で実行するように強制することができます。