在vs2019中使用C++调用C#生成的dll

在vs2019中使用C++调用C#生成的dll

    • 引言
    • C#生成dll
      • 创建工程
      • 配置工程属性
      • 编写代码
      • 生成dll
    • C++使用C#dll
    • Seccessful!

引言

  1. 网上有很多篇相关博客,我为什么还要写这篇博客呢?
  2. 原因很简单,就是网上的博客写的并不详细,不是给新手学习是用的,而是供老手回忆的。这样并不能让新手快速入手。
  3. 接下来我将以一个新手的视角讲解C#如何生成dll,C++又是如何调用。

C#生成dll

创建工程

在vs2019中使用C++调用C#生成的dll_第1张图片
打开vs2019,点击新项目,在上面的筛选条件中选中如图所示的条件,最后在下面选中“类库(.NET fromework)”,点击下一步,直至创建成功。

配置工程属性

在vs2019中使用C++调用C#生成的dll_第2张图片

  1. 选中项目名(图中1处),右键后点击属性(途中2处)
    在vs2019中使用C++调用C#生成的dll_第3张图片

  2. (上图中1处)是名字空间,后续在c++调用时会进行使用。(上图中2处)是.net fromework版本,选择适合你想用的版本。(上图中3处)是输出内容,类库代表dll(动态连接库)
    在vs2019中使用C++调用C#生成的dll_第4张图片

  3. 选择生成,根据上图中红线指示选择自己想要生成的文件应用于什么平台(这个c++和c#需要统一),我是用的是x64。

  4. Crtl + s 保存配置

编写代码

在vs2019中使用C++调用C#生成的dll_第5张图片

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test_DLL
{
     
    public class MyDll
    {
     
        public int add(int a, int b) {
     
            return a + b;
        }

    }
}

生成dll

  1. 点击运行
    在vs2019中使用C++调用C#生成的dll_第6张图片
  2. 查找dll
    在vs2019中使用C++调用C#生成的dll_第7张图片

C++使用C#dll

  1. 创建文件,创建一个普通项目即可
    在vs2019中使用C++调用C#生成的dll_第8张图片

  2. 打开属性配置
    在vs2019中使用C++调用C#生成的dll_第9张图片

  3. 修改属性
    在vs2019中使用C++调用C#生成的dll_第10张图片
    如上图所示修改“公共语言运行时支持”为clr 托管增量改为“是”,点击确定。
    在vs2019中使用C++调用C#生成的dll_第11张图片
    将语言中"符合模式"改为"否"

  4. 添加C#dll在vs2019中使用C++调用C#生成的dll_第12张图片
    a. 右键引用,点击添加引用
    在vs2019中使用C++调用C#生成的dll_第13张图片
    b. 选择浏览,找到你刚才生成的dll,选中确定
    在vs2019中使用C++调用C#生成的dll_第14张图片
    上图为我生成的dll,你们写的需要查找自己生成的dll 在什么位置

  5. 添加源文件
    在vs2019中使用C++调用C#生成的dll_第15张图片
    在vs2019中使用C++调用C#生成的dll_第16张图片

  6. 编写代码
    在vs2019中使用C++调用C#生成的dll_第17张图片
    上图1:运行程序;上图2:C#中你编写的名字空间;上图3:C#中你编写的类名

#include
using namespace test_DLL; // C#中名字空间
int main() {
     
	auto a = gcnew MyDll();// C#中类名
	auto aa = a->add(1, 5);// C#中函数
	std::cout << aa << std::endl;

	// 第二种写法
	MyDll^ b = gcnew MyDll();
	int bb = b->add(7, 8);
	std::cout << bb << std::endl;
	return 0;
}

Seccessful!

你可能感兴趣的:(C++)