0

Win7 x64 マシンでアプリケーションを開発しています。

外部の .dll ファイルを呼び出すコードがいくつかあります。.dll は 32 ビット マシン用に作成されました。私が抱えている問題は、Debug構成のデバッガーでアプリを実行すると、正常に動作することです。に切り替えるとすぐにRelease、.dll 呼び出しを行うメソッドへのすべてのエントリが失敗します。

An unhandled exception of type 'System.BadImageFormatException' occurred in MyCool.exe

Additional information:  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)

と の両方ReleaseDebug構成は同じで、アプリケーションは x86 用にビルドされています。この問題は、Windows 7 マシンでのみ発生します。XP を実行しているお客様は問題ありません。確かに、XP x64 を実行している顧客はいないので、それを確認できませんでした。

これが私のソリューション構成のイメージです。

マイ構成

Platform:オプションをすべての可能な組み合わせに変更しましたが、まだ機能していません。設定で隠れているものはありDebugますか?

編集:私はこれを理解しましたが、私は本当に問題を理解していません.

Buildプロジェクト プロパティの各プロジェクトのタブ ( CompileVB プロジェクトのタブ)Target CPUで、AnyCPU ではなく x86 に設定する必要があります。

これは別の質問かもしれませんが、なぜですか?ソリューション全体のプラットフォームを x86 に設定することと、プロジェクトごとにターゲット CPU を x86 に設定することの違いは何ですか。また、上の画像では、フィールドの目的は何Platformですか??

4

1 に答える 1

0

これは、AnyCPU が 64 ビットとして実行されるためですが、DLL は 32 ビット DLL としてコンパイルされている可能性があります。64 ビットの実行可能ファイルから 32 ビットの DLL をクロスコールすることはできません。

アプリを x86 に設定すると、強制的に 32 ビット アプリケーションとしてコンパイル (および実行) されます。

于 2015-03-02T18:29:47.387 に答える