C#调用C++的dll总归可以有两种方法:
1、非托管C++创建的dll库,需要用静态方法调用;
2、直接使用CLR,生成托管C++dll库。
很多时候在项目中需要通过C++调用C#的dll,或者反过来调用。首先明白一个前提:C#是托管型代码。C++是非托管型代码。
托管型代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。(C# )
非托管型代码对象有实际的内存地址,创建的对象必须自己来管理和释放。(C++)
托管C++dll库方式
1、打开VS创建C++项目"C++_CScharp_DLL"

然后选择应用程序和附加选项:
![(https://raw.githubusercontent.com/jinzh1992/-/master/QQ%E6%88%AA%E5%9B%BE20180530091607.png)]](https://i-blog.csdnimg.cn/blog_migrate/06424c8fa5d1407d6db72da50b5eccb1.png)
点击完成,C++的项目就新建好了。
2、添加代码文件
右键项目,添加类,如下图所示:

添加类之后会打开添加文件对话框,点击添加即可,如下图所示:

点击确定之后进去下一个对话框,填写文件名Function,如下图所示:

添加好后会生成h文件和cpp文件,如下图所示:

Function类文件代码如下:
//Function.h
#pragma once
#include <string>
public ref class Function
{
public:
Function(void);
~Function(void);
int menber;
int menberFuncAdd(int a,int b);
System::String^ say(System::String^ str);
};
//.cpp
#include "Function.h"
Function::Function(void)
{
}
Function::~Function(void)
{
}
int Function::menberFuncAdd(int a,int b)
{
return a+b;
}
System::String^ Function::say(System::String^ str)
{
return str;
}
填写完后Function.h文件会报错,错误类型如下:

这里需要在C++项目里面设置,让动态库受到公共语言运行时的支持。如下图所示:
打开项目属性


修改完成后点击项目右键生成DLL,看是否报错,成功结果如下图:

3、添加测试程序:
在该解决方案中添加测试程序:

添加一个C#控制台测试程序:

添加完后设为启动项:

添加引用:

将C++项目添加到C#的项目中:

4、编写测试代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Function fun = new Function();
Console

本文详细介绍了两种C#调用C++DLL的方法:托管C++DLL库方式和非托管C++DLL库。在托管方式下,创建C++项目并设置支持公共语言运行时,生成DLL后在C#中添加引用并调用。非托管方式则需使用`extern "C"`确保函数导出名正确,C#通过`DllImport`调用导出函数。文中还涉及了参数传递、回调函数等实际应用中的问题。
最低0.47元/天 解锁文章
4054





