【问题标题】:x64 C++ DLL called from x64 Managed Code从 x64 托管代码调用的 x64 C++ DLL
【发布时间】: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# c++ 64-bit dllimport


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多