C#是不能直接调用C++的类的,可以使用C++重写一个类库的方法将类中的成员函数暴露出来
一.用常规方法将C++代码封装成可供C++调用的Dll (这一步一般是从第三方得到的库)
Interface.h
#pragma once
#include <iostream>
class __declspec(dllexport) AddC
{
public:
int Add(int n1, int n2);
};
Interface.cpp
#include"Interface.h"
using namespace std;
int AddC::Add(int n1, int n2)
{
return n1+n2;
}
封装Dll后得到三个文件,lib,dll,.h文件
二.通过C++再写一个类库,将类中的方法暴露出来
引入头文件,
添加lib文件路径,并在代码中声明
将dll文件放在输出目录exe下
1.类库的h文件和cpp文件
AddClass.h
#pragma once
#include "Interface.h"
namespace AddClass
{
extern "C" __declspec(dllexport) int __stdcall AddH(int n1, int n2);
}
AddClass.cpp
#include"AddClass.h"
#pragma comment(lib,"Project1.lib")
namespace AddClass
{
AddC* g_pObj = new AddC();
int __stdcall AddH(int n1, int n2)
{
return g_pObj->Add(n1, n2);
}
}
将生成的dll连同第一步生成的dll拿出来
三.在C#中调用
1.将所有用到的dll文件放在输出目录下(exe存在的目录)
2.在C#中调用
[DllImport("Project2.dll")]
private static extern int AddH(int n1, int n2);