C++项目中调用C#库

最近有个功能在实现的时候要么要求 C++ 版本比较高(C++17)、要么要求的 Qt 版本比较高、要么要求 windows 版本比较高,而且也没有比较好的第三方 C++ 库。
无意间发现 C# 早就实现了该功能,故准备使用 C# 实现具体功能,在 C++ 项目中调用自己封装好的库。
这里简单编写了一下 demo 先成功实现 C++ 调用 C#。

生成 C# 库

  1. 新建 C# 类库项目: C++项目中调用C#库_第1张图片2. 添加如下代码:提供相加和相乘两种简单的方法用于测试:
    C++项目中调用C#库_第2张图片3. 设置类库项目属性:注意要将生成项目下的目标平台设置为调用该类库项目的 C++ 项目相同。
    C++项目中调用C#库_第3张图片4. 生成解决方案即生成相关的库文件,其存放路径为步骤 3 中指定的路径:C++项目中调用C#库_第4张图片生成的库文件路径:
    C++项目中调用C#库_第5张图片

在 C++ 项目中调用 C# 库

  1. 新建 C++ 项目:C++项目中调用C#库_第6张图片
  2. 设置项目属性:公共语言运行时支持选择clr:C++项目中调用C#库_第7张图片3. 将 C# 库文件分别放到代码目录和生成目录中:C++项目中调用C#库_第8张图片
    C++项目中调用C#库_第9张图片4. 添加如下代码:
    C# 生成的 dll 文件需要使用 #using 进行引入,不能使用 #include 引入。
    C# 生成对象要使用 gcnew 其作用和 new 类似都是生成一个对象并返回其指针。
    调用 C# 库生成的对象指针不能用 * 必须要用 ^,使用和 C++ 指针相同。
    C++项目中调用C#库_第10张图片5. 运行 C++ 工程,得到的输出如下:
    C++项目中调用C#库_第11张图片

另一种调用方法

使用 #import 引入 xx.tlb 文件。暂时不展开,因为不符合我项目的需求。

注意事项及可能遇到的问题

  • C# 库和 C++ 项目的目标平台必须相同。
  • C# 目标平台最好指定一个,尽量不要使用 Any。
  • C++ 项目必须在代码目录和生成目录下同时添加 C# 库文件,否则会提示找不到相关文件,或编译成功但启动时报错。
  • C++ 项目中可以使用 using namespace xx 包含 C# 的命名空间,也可以像截图中那样直接使用 xx::func
  • 如果使用 #import 方法添加 tlb 文件提示有误的话,可以将 设置 >> C/C++ >> 多处理器编译 设置为

你可能感兴趣的:(c#,c++,开发语言)