如何在C#中直接使用dll中的C++类
C#和C++是两种编程语言,直接在C#中使用C++类是很困难的,但万能的微软提供了C++/CLI这一工具作为胶水,把两者粘连起来的。
首先写一个简单的dll,名字就叫做Cpp吧,里面导出一个C++类。
// Simple.h
struct MyData
{int a = 0;int b = 0;
}
class CPP_EXPORT Simple
{
public:int add(MyData d){return d.a + d.b;}
}
然后再新建一个CLR工程,名字就叫做CppClr吧,用C++\CLI语言对Cpp dll做一个包装(制作胶水),记得添加对Cpp dll的引用。
#include <Simple.h>
namespace CppClr {public value struct MyDataCli{int a;int b;MyData toCpp(){MyData d;d.a = a;d.b = b;return d;}}public ref class SimpleCli{public:SimpleCli() : instance(new Simple()) {}~SimpleCli(){delete instance;}int add(MyDataCli d){return instance->add(d.toCpp());}private:Simple* instance = nullptr;}
}
好了,胶水制作好了,可以在C# 工程里试一下,建立一个控制台项目吧,名字就叫做App好了。
namespace App
{class Program{static void Main(string[] args){Cppclr.SimpleCli s = new Cppclr.SimpleCli();Cppclr.DataCli data;data.a = 2;data.b = 10;Trace.WriteLine(s.add(data));}}
}
完美!
C++\CLI这胶水还是比较好用的,相当于给dll 里的C++类重新写了一个头文件,让C# 能够认识。