0

x64 ビット C++ DLL を呼び出す x64 ビット マネージ プロジェクトがあります。これは Visual Studio 2010 ではうまくいきました。ただし、C++ プロジェクトを Visual Studio 2012 にアップグレードすると、x64 ビット DLL を呼び出すことができなくなり、エラーが表示されます。

不正な形式のプログラムをロードしようとしました。(HRESULT からの例外: 0x8007000B)

このプロジェクトは、Visual Studio 2010 でうまく機能しました。Visual Studio がプロジェクトを Visual Studio 2012 にアップグレードし、Visual Studio 2010 で C++ DLL をコンパイルしてリンクすることを許可しない場合、すべてがうまく機能します。

私の質問は、このコードを破るために何が変更されたかです。私は、一部の変更が必要な一般的なタイプが変更されたと想定しています。壊れる最初の関数シグネチャは次のとおりです。

C シャープの署名は次のとおりです。

internal static extern int ReverseBottomToTop(IntPtr imgptr, int nrows, int ncols)

C++ の署名は次のとおりです。

int ReverseBottomToTop(unsigned char *imgptr, int nrows, int ncols)
4

1 に答える 1

0

プロジェクトの設定を再確認することをお勧めします。C# プロジェクトには、実際には 3 つの関連する場所があります (ソリューション構成、プロジェクト構成へのソリューション構成のマッピング、および「プラットフォーム ターゲット」の下の「ビルド」セクションのプロジェクトのプロパティ ページで定義されているプロジェクト構成の実際の意味)。 . 通常、発生するエラーは、関係するバイナリ間のプラットフォームの不一致を示しているという点で正しいものです。

corflags.exe を実行して、.Net バイナリが本当に x64/AnyCPU ビルドであるかどうかを確認することをお勧めします。C++ DLL では、Dependency Walker は DLL が対象とするアーキテクチャを教えてくれます。

于 2013-06-25T16:27:06.393 に答える