0

発生しているDLL例外があります:

 response threw exception: Could not load file or assembly  or one of its dependencies. An attempt was made to load a program with an incorrect format.

次のDLL/ライブラリの組み合わせのすべてのソースコードがあります。私は奇妙な組み合わせがあるかどうか、またはこれが実行されることを確認するために何をチェックする必要があるかを理解しようとしています。静的ライブラリにネイティブC++コードがあり、マネージC++CLRでサポートされているDLLによって呼び出されます。次の時点まで、すべてが正常に機能しているようです。

マネージC++CLRでサポートされているDLLを呼び出すためのテストC#EXEコンソールアプリケーションを作成しました。これは期待どおりに機能します。これと同じマネージC++CLRでサポートされているDLLを呼び出すC#クラスライブラリがある場合に例外がスローされる違い。これはまったくサポートされていますか、それとも例外がスローされる理由ですか?この組み合わせが正しくない場合、C#クラスDLLを取得してマネージC++CLRでサポートされているDLLを呼び出すための回避策はありますか。

すべてがWindows764ビットとVisualStudio2012で作成されます。すべてのプロジェクトはリリースモードで、x64ビットプラットフォームが選択されています。

4

2 に答える 2

1

私が見たすべてのケースで、これは 32 ビット C# アプリが 64 ビット C++ または C++/CLI DLL をロードしようとしているか、64 ビット C# アプリが 32 ビット C++ または C++/ CLI DLL。

私が通常行う次のステップは、Dependency Walker を使用して C++/CLI dll をロードすることです。依存関係ウォーカーは、DLL がロードしようとしている DLL を表示します。場合によっては、パスに最初に表示される 64 ビット DLL と同じ名前の 32 ビット DLL があったため、間違った DLL をロードしようとしました。

Dependency Walker は、64 ビット DLL の横のアイコンに 64 を表示し、次の行に沿ってメッセージを表示することに注意してください:「エラー: 異なる CPU タイプのモジュールが見つかりました。」下部の情報ボックスに

于 2013-02-08T19:04:13.693 に答える
0

私の最善の策は、c ++ dllがwin32としてコンパイルされ、c#dllがAny CPUに設定され、64ビットシステムで実行されていることです...

于 2013-02-08T18:59:56.907 に答える