C#调用C++ DLL方法之P/Invoke

关于P/Invoke

Platform Invoke (P/Invoke) 是 .NET 提供的一种服务,允许托管代码(如 C#)调用非托管代码(如 C/C++ 编写的 DLL 函数)。通过 P/Invoke,可以在 .NET 应用程序中使用现有的非托管代码库,而无需重写这些库的功能。

P/Invoke 的主要用途包括:

  1. 调用操作系统 API 函数。
  2. 使用现有的非托管库(如 C/C++ 编写的库)。
  3. 与硬件设备进行交互。

使用 P/Invoke 的步骤如下:

  1. 引入 System.Runtime.InteropServices 命名空间。
  2. 使用 DllImport 属性声明非托管函数。
  3. 调用声明的非托管函数。

参考文献
Platform Invoke (P/Invoke)

代码示例

C++部分

复制代码
#include "pch.h"
#include <iostream>

#ifdef __cplusplus
extern "C" {
#endif

    // __stdcall 调用约定的加法函数实现
    __declspec(dllexport) int __stdcall Add(int a, int b)
    {
        return a + b;
    }

#ifdef __cplusplus
}
#endif

C#部分

复制代码
 internal class Program
 {
     // 导入 DLL 的加法函数
     [DllImport("TestDll.dll")]
     public static extern int Add(int a, int b);

     static void Main(string[] args)
     {
         Console.WriteLine("Hello World!");
         int a = 10;
         int b = 20;
         int num = Add(a, b);
         Console.WriteLine("num = {0}", num);
         Console.ReadKey();
     }
 }

记得将C++编译好的dll放入C#启动exe目录下

运行结果

相关推荐
工程师00738 分钟前
C# 继承、多态、虚方法表(VTable)原理
c#·多态·继承·虚方法表
玩转单片机与嵌入式41 分钟前
玩转边缘AI(TInyML):需要掌握的C++知识汇总!
开发语言·c++·人工智能
历程里程碑1 小时前
4 Git远程协作:从零开始,玩转仓库关联与代码同步(带实操代码讲解)
大数据·c++·git·elasticsearch·搜索引擎·gitee·github
汉克老师2 小时前
GESP5级C++考试语法知识(贪心算法(一)课堂例题精讲)
c++·贪心算法·gesp5级·gesp五级·贪心规律
墨染千千秋2 小时前
C++头文件的使用,和各个头文件与头文件用处
c++
呱呱巨基2 小时前
Linux 基础IO
linux·c++·笔记·学习
旖-旎2 小时前
深搜练习(N皇后)(10)
c++·算法·深度优先·力扣
头发够用的程序员3 小时前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试
月昤昽3 小时前
autocad二次开发 3.阵列与面域
c#·二次开发·autocad二次开发
水龙吟啸3 小时前
数据结构与算法随机复习–Day1
数据结构·c++·算法