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#的正则表达式”的完整攻略。 什么是正则表达式 正则表达式是一个特殊的字符序列,它可以用来匹配和搜索文本字符串,同时也是C#编程中必不可少的一项技能。 常用的正则表达式语法 字符类型 .:匹配除换行符以外的任意字符 []:匹配括号内的任意一个字符,如[abc]匹配字符a、b、c [^]:匹配括号内的除了指定字符以外的任意一个…

    C# 2023年6月1日
    00
  • ADO.NET数据库访问技术

    ADO.NET是Microsoft .NET Framework中提供的用于访问数据源的技术,可以用于访问关系型数据库(如SQL Server、MySQL等)和非关系型数据库(如XML)。下面将详细讲解ADO.NET的使用攻略。 准备工作 首先,需要在项目中添加对System.Data.dll程序集的引用,这个程序集包含了与ADO.NET有关的一些命名空间(…

    C# 2023年5月31日
    00
  • .Net Winform开发笔记(四)透过现象看本质

    接下来我将详细讲解“.Net Winform开发笔记(四)透过现象看本质”的完整攻略。 攻略概述 本篇攻略主要介绍如何透过现象看本质进行Winform开发,内容分为三个部分: 理解Winform的本质: 认识Winform的结构 理解Winform的生命周期 常用Winform控件的本质: 理解各种Winform控件的特点和用途 能够选择正确的控件实现需要的…

    C# 2023年5月31日
    00
  • C#如何将DLL打包到程序中

    C#中往往会用到外部DLL来实现某些功能,但是如果希望打包成一个独立的应用,就需要将这些DLL打包到程序中。下面是详细讲解“C#如何将DLL打包到程序中”的完整攻略: 1. 使用NuGet管理依赖项 NuGet是一个可以在Visual Studio中使用的包管理器,使用NuGet可以方便的引入和管理各种依赖项,也包括需要打包到程序中的DLL。下面是使用NuG…

    C# 2023年6月6日
    00
  • C# 使用相同权限调用 cmd 传入命令的方法

    为了在C#中以相同权限调用cmd传入命令,以下是步骤: 创建一个ProcessStartInfo对象来设置启动进程时使用的属性,包括ProcessStartInfo对象的文件名和WorkingDirectory属性。WorkingDirectory属性是命令执行的起始目录。 通过Process类,创建一个转到cmd.exe的进程。 在cmd.exe进程中,输…

    C# 2023年6月6日
    00
  • C#中ListView控件实现窗体代码

    让我来为您详细讲解C#中ListView控件实现窗体代码的完整攻略。 1. 创建ListView控件 要在C#中使用ListView控件,首先需要在窗体上添加该控件。可通过在Visual Studio设计器中双击工具箱中的ListView控件,将其放置在窗体上。或者在代码中使用以下代码创建: ListView listView1 = new ListView…

    C# 2023年6月1日
    00
  • c# 如何实现获取二维数组的列数

    获取二维数组的列数是c#编程中的一个基础问题,下面详细讲解如何实现。 方法一:使用 GetLength() 方法 c#里的二维数组可以使用 GetLength() 方法获取数组的长度,用这个方法也可以获得二维数组的列数,代码如下: int[,] myArray = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, …

    C# 2023年6月6日
    00
  • DevExpress之ChartControl实现时间轴实例

    下面我将为您详细讲解实现DevExpress ChartControl的时间轴的完整攻略。 1、前期准备 在开始实现时间轴功能之前,我们需要首先完成以下几个准备工作: 安装DevExpress控件库 我们需要在项目中引入DevExpress控件库,因此需要先进行安装。可以下载最新版本的DevExpress控件库并进行安装或通过NuGet管理器进行安装。 添加…

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