vs2019 实现C#调用c++的dll两种方法

1. 使用DllImport进行静态链接

1.1 创建C++的动态链接库

首先,我们需要创建一个C++的动态链接库(dll)供C#调用。以下是一个简单的示例,包含一个C++函数,该函数将两个整数相加并返回结果:

// MathLibrary.cpp

#include "pch.h"

extern "C" __declspec(dllexport) int Add(int a, int b)

{

return a + b;

}

在这个示例中,我们使用了__declspec(dllexport)Add函数声明为可由其他程序调用。

1.2 创建C#项目并引用C++库

接下来,我们需要在C#项目中引用C++的动态链接库。首先,创建一个新的C#控制台应用程序,并在项目目录中创建一个名为"NativeLib"的文件夹。将生成的C++动态链接库(dll)复制到"NativeLib"文件夹中。

然后,在C#项目中添加对C++库的引用。右键单击项目,选择"添加" > "引用",然后浏览到"NativeLib"文件夹中选择C++库的dll文件。

1.3 调用C++函数

现在,我们可以在C#代码中调用C++函数。以下是一个示例,演示了如何使用DllImport特性和DllImport属性来调用C++函数:

// Program.cs

using System;

using System.Runtime.InteropServices;

class Program

{

[DllImport("NativeLib/MathLibrary.dll")]

public static extern int Add(int a, int b);

static void Main(string[] args)

{

int result = Add(1, 2);

Console.WriteLine("Result: " + result);

}

}

在这个示例中,我们使用了DllImport特性和extern关键字来定义了一个与C++函数Add的外部引用。然后我们就可以像调用本地C#函数一样调用Add函数。

2. 使用C++/CLI进行混合开发

2.1 创建C++/CLI库

另一种方法是使用C++/CLI进行混合开发。C++/CLI是一种扩展了C++语言的版本,可以方便地与C#代码进行互操作。

首先,创建一个新的C++/CLI类库项目。以下是一个示例,包含一个C++/CLI类,该类包装了一个C++函数:

// NativeLibrary.h

#pragma once

namespace NativeLibrary

{

public ref class MathLibrary

{

public:

static int Add(int a, int b);

};

}

// NativeLibrary.cpp

#include "pch.h"

#include "NativeLibrary.h"

#include "MathLibrary.h"

namespace NativeLibrary

{

int MathLibrary::Add(int a, int b)

{

return ::Add(a, b);

}

}

在这个示例中,我们在命名空间NativeLibrary中定义了一个C++/CLI类MathLibrary,并将C++函数Add的调用委托给了它。这样,我们就可以在C#中通过调用这个类的静态方法来访问C++函数。

2.2 创建C#项目并引用C++/CLI库

与前面的方法类似,创建一个新的C#控制台应用程序,并在项目目录中创建一个名为"NativeLib"的文件夹。将生成的C++/CLI库的dll文件复制到"NativeLib"文件夹中。

然后,添加对C++/CLI库的引用。右键单击项目,选择"添加" > "引用",然后浏览到"NativeLib"文件夹中选择C++/CLI库的dll文件。

2.3 调用C++/CLI类

现在,我们可以在C#代码中调用C++/CLI类的方法。以下是一个示例,演示了如何创建一个MathLibrary对象并调用其中的方法:

// Program.cs

using System;

class Program

{

static void Main(string[] args)

{

NativeLibrary.MathLibrary math = new NativeLibrary.MathLibrary();

int result = math.Add(1, 2);

Console.WriteLine("Result: " + result);

}

}

在这个示例中,我们创建了一个MathLibrary对象,并通过调用其中的Add方法来调用C++函数。

总结

本文介绍了两种使用C#调用C++的dll的方法:使用DllImport进行静态链接和使用C++/CLI进行混合开发。使用DllImport可以快速简便地引用C++的动态链接库,并通过设置DllImport特性和extern关键字来调用C++函数。而使用C++/CLI需要创建一个C++/CLI类库,并将C++函数封装到C++/CLI类中,然后通过引用该类库并创建对象来调用C++函数。

无论使用哪种方法,您都可以方便地在C#项目中调用C++的函数,实现更高效的混合开发。

后端开发标签