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

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

本文主要介绍使用vs2019实现C#调用c++的dll两种方法。

方法一:使用DllImport

  1. 编写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;
}

  1. 生成动态链接库文件

  2. 新建C#控制台应用程序

  3. 在项目中添加对应的dll文件

csharp
[DllImport("cppdll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int a, int b);

  1. 调用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++动态链接库

  1. 编写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;
}

  1. 生成动态链接库文件

  2. 新建C++/CLI项目

  3. 用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);
}
```

  1. 生成Wrapper.dll文件

  2. 新建C#控制台应用程序

  3. 在项目中添加Wrapper.dll引用

  4. 调用包装函数

```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技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 怎么利用c#修改services的Startup type

    要利用C#修改Windows服务的启动类型(Startup type),可以使用.NET Framework下的ServiceController和ServiceType类。步骤如下: 步骤一:添加引用 在项目中添加System.ServiceProcess引用。 步骤二:获取服务 使用ServiceController类获取要修改的服务,可以用服务名称或服…

    C# 2023年6月6日
    00
  • .NetCore手动封装日志组件的实现代码

    手动封装日志组件是一种常见的.NET Core开发技巧,可以帮助我们更好地管理和记录应用程序的日志信息。下面是手动封装日志组件的实现代码攻略: 创建日志组件类:首先,我们需要创建一个日志组件类。我们可以在.NET Core应用程序中创建一个名为Logger的类,并添加以下代码: using System; public class Logger { publ…

    C# 2023年5月16日
    00
  • ASP.NET Core中的wwwroot文件夹

    ASP.NET Core中的wwwroot文件夹是用于存放Web应用程序静态资源的目录。该目录中的文件可被直接发布到Web服务器上,比如图片、JavaScript、CSS、HTML文件等,这些文件可以通过路径直接访问,而不需要经过服务器端的处理。下面我们来详细讲解一下wwwroot文件夹。 如何创建wwwroot文件夹? 在使用ASP.NET Core建立W…

    C# 2023年6月3日
    00
  • 使用Deflate算法对文件进行压缩与解压缩的方法详解

    使用Deflate算法对文件进行压缩与解压缩的方法详解 什么是Deflate算法 Deflate算法是一种用于压缩数据的算法,它广泛应用于网络传输和数据存储等领域。Deflate算法使用了两种压缩技术:哈夫曼编码和LZ77算法,其中哈夫曼编码用于无损数据压缩而LZ77算法则用于有损数据压缩。 压缩文件的步骤 使用Deflate算法对文件进行压缩的步骤如下: …

    C# 2023年6月8日
    00
  • C#中dynamic关键字的正确用法(推荐)

    下面是“C#中dynamic关键字的正确用法(推荐)”的详细攻略: 什么是dynamic关键字 C#中的dynamic关键字,是用于在运行时(而非编译时)进行类型检查和绑定,它可以让我们代码更加灵活、简洁、易读。 C#中的dynamic和var关键字的区别在于,var关键字是在编译时进行类型判断并声明变量类型,在编译后变量类型就确定了,而dynamic关键字…

    C# 2023年5月15日
    00
  • C#实现五子棋游戏

    C#实现五子棋游戏——完整攻略 1. 整体思路 五子棋游戏是一种基于棋盘的二人策略游戏,玩家需要在棋盘上交替落子,最先形成连续五个同色棋子的一方获胜。从整体上看,C#实现五子棋游戏需要实现如下基本功能: 初始化游戏界面:包括生成棋盘、设置初始状态等。 点击落子事件:点击棋盘上某个交叉点,将当前玩家的棋子落在该点上。 判定胜负:每次落子后,需要判断当前状态是否…

    C# 2023年6月7日
    00
  • C#实现ini文件读写操作

    下面是关于” C#实现ini文件读写操作 “的完整攻略及示例。 1. 什么是ini文件? INI是initialization file缩写,可以翻译成”初始化文件”。在windows操作系统中,INI文件通常用于存储应用程 序的配置信息。这些信息包括文件路径、窗口大小、主题等等。 2. 如何实现ini文件读写操作? 在C#中,我们可以使用System.IO…

    C# 2023年6月1日
    00
  • c#的dataset离线数据集示例

    下面是“C#的dataset离线数据集示例”的完整攻略: 什么是 dataset? dataset是C#语言中数据存储和管理的一种对象,它可以在离线状态下对数据进行操作,而不需要一直与数据库保持连接。使用dataset可以查询、修改、删除和插入数据等操作。dataset由多个DataTable组成,每个DataTable代表一个数据表格。 创建 datase…

    C# 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部