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#版Windows服务安装卸载小工具

    C#版Windows服务安装卸载小工具是一种方便的工具,可以用于安装、卸载和管理Windows服务。以下是使用C#实现Windows服务安装卸载小工具的完整攻略。 环境准备 在使用C#实现Windows服务安装卸载小工具前,需要确保以下环境已经准备好: Visual Studio已经安装并配置好了环境变量。 项目中已经添加了引入的包的依赖。 实现Window…

    C# 2023年5月15日
    00
  • 自定义实现Json字符串向C#对象转变的方法

    自定义实现 Json 字符串向 C# 对象转化的方法,可以参考以下步骤: 步骤1:实现一个 Json 转化类 创建一个类,用于将 Json 字符串转换为 C# 对象。这个类应当包括一个将 Json 字符串解析成 JObject 对象的方法。可以使用 Newtonsoft.Json 库来实现: using Newtonsoft.Json.Linq; publi…

    C# 2023年5月31日
    00
  • C#实现FTP传送文件的示例

    下面是详细讲解“C#实现FTP传送文件的示例”的完整攻略: 一、前置准备 在使用C#来实现FTP传送文件前,我们需要确保我们已经安装了.NET Framework并配置好了我们的FTP服务器。 1. 安装.NET Framework .NET Framework是Microsoft开发和运行Windows操作系统的一个核心组件,我们需要确保我们已经安装了最新…

    C# 2023年6月1日
    00
  • C#实现毫秒转换成时分秒的方法

    C#实现毫秒转换成时分秒的方法 当我们需要将毫秒转换成可读性更好的时分秒格式时,可以使用C#中提供的方法来进行实现。以下是完整的攻略过程: 1. 使用TimeSpan.FromMilliseconds()方法将毫秒转换成TimeSpan对象 我们可以使用C#中的TimeSpan.FromMilliseconds()方法将毫秒转换成TimeSpan对象,该方法…

    C# 2023年6月1日
    00
  • C#页码导航显示及算法实现代码

    当网站中的内容较多时,常常需要用到分页功能来实现良好的用户体验。下面就是C#页码导航的实现。 一、分页算法 如何实现分页?我们需要首先确定一页要显示的记录数(pageSize)和当前页码(currentPageNum),其次需要得到数据表中数据总数(totalCount),然后根据这三个值来计算总的页数(totalPageNum)。 totalPageNum…

    C# 2023年6月7日
    00
  • 详解C# 中Session的用法

    详解C# 中Session的用法 什么是Session Session 是指会话,在 Web 应用程序中,它表示从客户端发来的一系列HTTP请求和响应交互。Session 可以用来存储和检索任何类型的对象,且这些对象在整个 Session 生命周期内都可以使用。在 ASP.NET 中可以使用 Session 对象来在服务器上存储和检索用户特定的信息。Sess…

    C# 2023年6月7日
    00
  • c#源码的执行过程详解

    c#源码的执行过程详解 1. 源代码编译过程 C#是一种基于CLR(公共语言运行时)的编程语言,它的源代码编译过程分为两个阶段:编译阶段和运行时阶段。 1.1 编译阶段 在C#中,源代码必须先被编译成微软中间语言(MSIL)或CIL(公共中间语言)代码。MSIL代码是CLR的执行代码,它不是本地机器代码,而是被CLR解释执行的代码。因此,编译后的代码可以在任…

    C# 2023年6月1日
    00
  • VS2019打包WPF安装程序最新教程(图文详解)

    以下是关于“VS2019打包WPF安装程序最新教程(图文详解)”的完整攻略: 1. 简介 该教程主要是介绍如何使用Visual Studio 2019打包WPF项目的安装程序,方便进行软件的发布和分发。 2. 准备工作 在进行打包前,需要进行以下准备工作:- 确保WPF项目已经完成开发和测试,并且能够正常运行。- 安装Visual Studio 2019,并…

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