C#与C++交互开发系列(十三):在C#中使用C++编写的DLL,导出类的完整指南

在这里插入图片描述

前言

在跨平台和跨语言开发中,C++ 和 C# 的互操作性可以帮助我们实现更灵活且高性能的解决方案。C++ DLL 可以封装高效的算法或硬件相关的代码,而在 C# 中调用这些功能则可以大大简化开发。然而,由于 C++ 和 C# 的底层实现不同,导出 C++ 类并在 C# 中使用并不简单。因此,我们需要经过一系列步骤才能实现这两种语言之间的互操作性。

前面介绍的基本都是单个函数的导出,本文将详细介绍如何将 C++ 类导出到 DLL 中,并在 C# 中调用这些类。我们将通过实际的代码示例,帮助理解整个过程。

1. 环境准备

  • 开发工具: Visual Studio 2022 或更高版本
  • 目标平台: Windows
  • 编程语言: C++ 和 C#
  • 项目类型: DLL(动态链接库)和 .NET Core 或 .NET Framework 应用

2. 创建 C++ 项目并导出类

首先,我们需要创建一个 C++ 项目,并将类导出为 DLL。

2.1 创建 C++ DLL 项目

  1. 打开 Visual Studio,选择 File > New > Project
  2. 选择 C++ Class Library (DLL),并为项目命名为 CppLibrary
  3. 点击 Create,此时 Visual Studio 会生成一个 DLL 项目。

2.2 定义一个简单的 C++ 类

接下来,我们定义一个简单的 C++ 类,并将其导出。

// MyClass.h
#pragma once

#ifdef CPPLIBRARY_EXPORTS
#define CPPLIBRARY_API __declspec(dllexport)
#else
#define CPPLIBRARY_API __declspec(dllimport)
#endif

class CPPLIBRARY_API MyClass {
   
    
    
public:
    MyClass();
    ~MyClass();

    void SayHello();
    int Add(int a, int b);
};

在这个代码中,我们使用了 __declspec(dllexport)__declspec(dllimport) 来控制类的导入和导出。CPPLIBRARY_EXPORTS 是在编译 DLL 时定义的宏,它确保当我们构建 DLL 时,MyClass 类被正确导出。

2.3 实现类方法

现在我们需要实现 MyClass 类的具体方法。

// MyClass.cpp
#include "MyClass.h"
#include <iostream>

MyClass::MyClass() {
   
    
    }

MyClass::~MyClass() {
   
    
    }

void MyClass::SayHello() {
   
    
    
    std::cout << "Hello from C++!" << std::endl;
}

int MyClass::Add(int a, int b) {
   
    
    
    return a + b;
}

2.4 编译 DLL

  1. 右键点击解决方案中的项目名称,选择 Build,生成 C+