如何在c#和c++之间进行互操作

本文关键字:之间 互操作 c++ | 更新日期: 2023-09-27 18:16:59

我正在尝试两种语言之间非常基本的互操作。我基本上有一些性能密集型代码我想在c++中处理然后将结果返回到我的应用程序

所有将在Visual Studio中编译。

我选择int作为输入和输出类型,因为封送可能有点不稳定,并且不是我真正要处理的。

c++ i have:

#include "stdafx.h" // default from vs2013, no idea what it is
_declspec(dllexport) int Diu(int p) {
    return p * 2;
}
c# i have:
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

附加信息:尝试用不正确的格式。(Exception from HRESULT: 0x8007000B)

c++项目在创建对话框中作为控制台应用程序> Dll创建。我检查了反汇编器中的c++ dll,我可以看到一个Diu作为导出的符号。

。关于设置界面,我错过了什么?

如何在c#和c++之间进行互操作

当你得到这个错误时:HRESULT: 0x8007000B是由平台不兼容引起的。
检查您的编译器配置文件是否设置为相同的平台(x86, x64AnyCPU)。