【发布时间】:2013-06-24 13:34:15
【问题描述】:
我有一个调用 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)
【问题讨论】:
-
可能看起来并不完全重复,但答案就在那里:你以某种方式混合平台
-
C# 项目在 VS2012 中有一种设置平台目标的新方法。它在以前的版本中不存在,因此它设置错误的可能性很大,特别是因为默认设置是错误的。右键单击您的 C# EXE 项目、属性、构建选项卡。取消勾选“首选 32 位”选项。