关于P/Invoke
Platform Invoke (P/Invoke) 是 .NET 提供的一种服务,允许托管代码(如 C#)调用非托管代码(如 C/C++ 编写的 DLL 函数)。通过 P/Invoke,可以在 .NET 应用程序中使用现有的非托管代码库,而无需重写这些库的功能。
P/Invoke 的主要用途包括:
- 调用操作系统 API 函数。
- 使用现有的非托管库(如 C/C++ 编写的库)。
- 与硬件设备进行交互。
使用 P/Invoke 的步骤如下:
- 引入 System.Runtime.InteropServices 命名空间。
- 使用 DllImport 属性声明非托管函数。
- 调用声明的非托管函数。
参考文献
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目录下
运行结果