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# 项目中,实际上需要查看三个相关位置(解决方案配置、解决方案配置到项目配置的映射以及项目配置的实际含义,如“平台目标”下“构建”部分的项目属性页中定义) . 通常,您得到的错误是正确的,因为它表明所涉及的二进制文件之间存在平台不匹配。

您可能需要运行 corflags.exe 来查看您的 .Net 二进制文件是否真的是 x64/AnyCPU 构建。在 C++ DLL 上,dependency walker 可以告诉您 DLL 用于什么体系结构。

于 2013-06-25T16:27:06.393 回答