【发布时间】:2016-11-09 09:49:05
【问题描述】:
我正在尝试在两种语言之间进行非常基本的互操作。我基本上有一些我想在 C++ 中处理的性能密集型代码,然后将结果返回给我的应用程序。
所有内容都将在 Visual Studio 中编译。
我选择 int 作为输入和输出类型,因为编组可能有点不稳定,并不是我真正要处理的。
我有 C++:
#include "stdafx.h" // default from vs2013, no idea what it is
_declspec(dllexport) int Diu(int p) {
return p * 2;
}
我有 C#:
using System;
namespace Interop {
public class Program{
[System.Runtime.InteropServices.DllImport("Hardworker.dll")]
public static extern int Diu(int p);
private static void Main(string[] args) {
Console.WriteLine(Diu(2));
}
}
}
所以这是一个非常基本的例子。但我得到了例外:
“System.BadImageFormatException”类型的未处理异常 发生在 Interop.exe 中
附加信息:尝试加载具有 格式不正确。 (HRESULT 异常:0x8007000B)
C++ 项目在创建对话框中创建为控制台应用程序 > Dll。 我在反汇编程序中检查了 C++ dll,我可以看到一个 Diu 作为导出符号。
呃。设置互操作时我错过了什么?
【问题讨论】:
-
(或未来的读者)除了注意匹配平台(x86 与 x64,原生 C++ 不支持 AnyCPU)和名称修改之外,还要注意匹配 C++ 之间的调用约定代码和 p/invoke 声明。
标签: c# c++ .net visual-studio interop