我正在尝试两种语言之间的非常基本的互操作。我基本上有一些性能密集的代码,我想在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 作为导出符号。
嗯。关于设置互操作,我错过了什么?
答案 0 :(得分:4)
当您收到此错误时:HRESULT: 0x8007000B
是由paltform不兼容引起的
检查您的编译器配置文件是否设置为同一平台(x86
,x64
或AnyCPU
)。