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#集合本质之队列的用法详解

    C#集合本质之队列的用法详解 什么是队列 队列是计算机科学中一种抽象数据类型,表示先进先出 (FIFO) 的线性数据结构。在队列中,元素从后端(也称为队尾)入队,从前端(也称为队首)出队。队列常用于存储按顺序排列的数据,如等待处理的请求和待打印的文档等。 C#中的队列 C#中的队列是由System.Collections命名空间下的Queue类实现的,它是一…

    C# 2023年6月7日
    00
  • C#串口连接的读取和发送详解

    C#串口连接的读取和发送详解 概述 C#串口连接是一种常见的数据通信方式,利用串口可以使用C#程序与外部硬件设备进行通信,接收外设传送的数据,也可以向外设发送控制指令。本文将详细讲解C#串口连接的读取和发送。 连接串口 在C#程序中连接串口需要进行以下步骤: 引入System.IO.Ports命名空间 csharpusing System.IO.Ports;…

    C# 2023年6月1日
    00
  • C#调用sql2000存储过程方法小结

    下面就是详细讲解“C#调用sql2000存储过程方法小结”的完整攻略。 前提条件 在开始使用C#调用SQL Server 2000存储过程之前,需要满足以下前提条件: 电脑上已安装SQL Server 2000或更高版本,并正确配置SQL Server的连接信息。 电脑上已安装Visual Studio开发工具,并正确配置了数据库连接信息。 步骤 接下来,我…

    C# 2023年6月2日
    00
  • extjs DataReader、JsonReader、XmlReader的构造方法

    ExtJS提供了三种数据读取器(DataReader):JsonReader、XmlReader、ArrayReader。其中JsonReader与XmlReader是最常用的两种,它们可以将Json和Xml数据解析成ExtJS中的数据集合(store). DataReader是一种工具,用于将来自服务器的响应数据解析成更易于在ExtJS中使用的格式。各个类…

    C# 2023年6月1日
    00
  • 部署.NET6项目到IIS

    部署.NET6项目到IIS .NET 6是一个跨平台的开源框架,它可以帮助我们构建高性能的Web应用程序。IIS是一个Web服务器,它可以帮助我们部署和托管Web应用程序。本攻略将详细介绍如何将.NET 6项目部署到IIS。 环境要求 在进行.NET 6项目部署到IIS时,我们需要满足以下环境要求: .NET 6 SDK IIS 创建.NET 6项目 我们可…

    C# 2023年5月17日
    00
  • C#基于NPOI操作Excel

    下面是“C#基于NPOI操作Excel”的完整攻略: 1. 简介 NPOI是一个.NET平台下的开源组件,支持读写Office2007及以上版本(.xlsx/.docx)的Excel/Word文件。NPOI官方文档详细说明了如何在项目中使用NPOI进行对Excel文件的操作。在本文中,我们将详细介绍C#基于NPOI操作Excel的过程。 2. 安装 在Vis…

    C# 2023年5月15日
    00
  • windows下搭建Consul集群

    要在Windows操作系统下搭建Consul集群,需要经过以下步骤: 1. 下载和安装Consul 向Consul的官方网站下载适用于Windows的Consul二进制文件,在本地解压缩后将Consul二进制文件添加到环境变量中。具体安装方法可以参考Consul官方文档。 2. 初始化Consul集群 使用以下命令初始化Consul集群: consul ag…

    C# 2023年6月3日
    00
  • C#操作windows系统进程的方法

    C#操作windows系统进程的方法 在C#中,我们可以使用Process类来控制和操作Windows系统的进程。 如何启动一个进程? 我们可以使用Process.Start()方法来启动一个新的进程。该方法有多个重载形式,其中最常用的形式是传递进程的可执行文件的完整路径或者文件名,可以带上其它参数,可见以下示例: Process.Start("n…

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