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目录下

运行结果

相关推荐
余额瞒着我当琳4 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
ShineWinsu5 小时前
对于C++:布隆过滤器(bloomfilter)的详细解析
c++·面试·位图·位运算·布隆过滤器·海量数据·比特位
曹牧5 小时前
C#:数字的定义和表示方式
算法·c#
Young_Gnay7 小时前
.NET 之 WebApi学习笔记 (持续更新)
后端·c#
李高钢8 小时前
WPF MVVM Light 入门:从零到Hello World
c#·wpf
牛油果子哥q9 小时前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++
大鹏的NLP博客9 小时前
通用 Linux 嵌入式板端 C/C++ ABI 与 Glibc 依赖治理规范
linux·c++·交叉编译
曹牧9 小时前
C#:函数参数指定默认值
开发语言·c#
ysa0510309 小时前
c++常用自带函数用法与注意
c++·笔记·算法
李高钢10 小时前
WPF MVVM Light(三):RelayCommand 命令与 Messenger 消息
前端·c#·wpf