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

运行结果

相关推荐
Cando学算法10 小时前
欧拉回路(一笔画)
数据结构·c++·图论
我不是懒洋洋10 小时前
手写一个并查集:从原理到最小生成树实战
c语言·c++·经验分享·算法
叼烟扛炮11 小时前
C++ 知识点06 inline
开发语言·c++·inline
khalil102011 小时前
代码随想录算法训练营Day-43 动态规划10 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
数据结构·c++·算法·leetcode·动态规划·子序列问题
ximu_polaris11 小时前
设计模式(C++)-行为型模式-解释器模式
c++·设计模式·解释器模式
曹牧11 小时前
C#:同一项目中维护多个版本的代码
开发语言·c#
2401_8971905511 小时前
【C++高阶系列】告别内查找局限:基于磁盘 I/O 视角的 B 树深度剖析与 C++ 泛型实现!
java·c++·算法
m2xgo11 小时前
ThreadPoolexecutor源码分析、C++11线程池实现
开发语言·c++
工程师00711 小时前
C# UI 跨线程刷新:Invoke/BeginInvoke 原理与封装
c#·invoke·begininvoke
悲伤小伞11 小时前
LeetCode 热题 100_3-128. 最长连续序列
c++·算法·leetcode·哈希算法