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)