关于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目录下
运行结果