从x64托管代码调用的x64 C ++ DLL

时间:2013-06-24 13:34:15

标签: c# c++ 64-bit dllimport

我有一个x64位托管项目,调用x64位C ++ DLL。这在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 sharp中的签名是:

internal static extern int ReverseBottomToTop(IntPtr imgptr, int nrows, int ncols)
C ++中的

签名是:

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

1 个答案:

答案 0 :(得分:0)

您可能想要仔细检查项目设置。在C#项目中,实际上有三个相关的位置可供查看(解决方案配置,解决方案配置到项目配置的映射以及项目配置的实际含义,如项目属性页面中“平台目标”下的“构建”部分中所定义) 。通常你得到的错误是正确的,因为它表明所涉及的二进制文件之间的平台不匹配。

您可能希望运行corflags.exe以查看.Net二进制文件是否真的是x64 / AnyCPU版本。在C ++ DLL上,依赖性walker可以告诉你DLL的架构。