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://img-blog.csdnimg.cn/8ebcb30014aa46a589cb4d46a97f0dd8.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