vs2019 实现C#调用c++的dll两种方法
本文主要介绍使用vs2019实现C#调用c++的dll两种方法。
方法一:使用DllImport
- 编写C++动态链接库
cpp
// cppdll.h
extern "C" __declspec(dllexport) int add(int a, int b);
cpp
// cppdll.cpp
int add(int a, int b)
{
return a + b;
}
-
生成动态链接库文件
-
新建C#控制台应用程序
-
在项目中添加对应的dll文件
csharp
[DllImport("cppdll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int a, int b);
- 调用C++函数
csharp
static void Main(string[] args)
{
int a = 1, b = 2;
int res = add(a, b);
Console.WriteLine("{0} + {1} = {2}", a, b, res);
}
示例代码:
```csharp
using System;
using System.Runtime.InteropServices;
namespace DllCall
{
class Program
{
[DllImport("cppdll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int a, int b);
static void Main(string[] args)
{
int a = 1, b = 2;
int res = add(a, b);
Console.WriteLine("{0} + {1} = {2}", a, b, res);
}
}
}
```
方法二:使用C++/CLI包装C++动态链接库
- 编写C++动态链接库
cpp
// cppdll.h
extern "C" __declspec(dllexport) int add(int a, int b);
cpp
// cppdll.cpp
int add(int a, int b)
{
return a + b;
}
-
生成动态链接库文件
-
新建C++/CLI项目
-
用C++/CLI包装C++动态链接库函数
```cpp
// Wrapper.h
#pragma once
class Wrapper
{
public:
static int add(int a, int b);
};
```
```cpp
// Wrapper.cpp
#include "Wrapper.h"
#include "../cppdll/cppdll.h"
int Wrapper::add(int a, int b)
{
return add(a, b);
}
```
-
生成Wrapper.dll文件
-
新建C#控制台应用程序
-
在项目中添加Wrapper.dll引用
-
调用包装函数
```csharp
using System;
using Wrapper;
namespace DllCall
{
class Program
{
static void Main(string[] args)
{
int a = 1, b = 2;
int res = Wrapper.add(a, b);
Console.WriteLine("{0} + {1} = {2}", a, b, res);
}
}
}
```
示例代码:
using System;
using Wrapper;
namespace DllCall
{
class Program
{
static void Main(string[] args)
{
int a = 1, b = 2;
int res = Wrapper.add(a, b);
Console.WriteLine("{0} + {1} = {2}", a, b, res);
}
}
}
以上就是通过vs2019实现C#调用c++的dll两种方法的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vs2019 实现C#调用c++的dll两种方法 - Python技术站