Gists
PInvoke
PInvoke 既 Platform Invocation Services 平台调用服务,允许你使用 C# 之类的语言调用外部函数。比如,许多硬件中,其驱动是用 C/C++ 写的,而用 C# 在外面再套一层壳子来管理界面(WPF/Winform)。这时,可以使用 PInvoke 方法让 C# 去调用动态链接库中的函数。
PInvoke
PInvoke 既 Platform Invocation Services 平台调用服务,允许你使用 C# 之类的语言调用外部函数。比如,许多硬件中,其驱动是用 C/C++ 写的,而用 C# 在外面再套一层壳子来管理界面(WPF/Winform)。这时,可以使用 PInvoke 方法让 C# 去调用动态链接库中的函数。
《手把手教你PInvoke》
可以在 C# 中使用 DLLImport 标记链接库并引入其中函数。
public class Win32
{
[DllImport("user32.dll")]
public static extern IntPtr MessageBox(
int hWnd,
String text,
String caption,
uint type
);
}
class Program
{
static void Main(string[] args)
{
Win32.MessageBox(0, "Hello, World", "Hi~", 0);
Console.ReadLine();
}
}
如果不知道有什么方法可以用、方法对应哪个动态链接库以及参数是啥,都可以上官方文档中找,里面有函数作用及签名等详细的说明。也可以到 pinvoke.net 找到已经汇总好的代码。
《使用PInvoke互操作,让C#和C++愉快的交互优势互补》
介绍了如何使用 Visual Studio 创建一个 C++ 动态链接库并在 C# 中调用。
要了解托管代码和非托管代码的函数签名的类型转换,可以查阅官方文档。
如果碰到复杂类型,可以使用 PInvoke Interop Assistant 工具自动转换代码。
此外,在 C++ 中,可以通过函数指针直接接受来自 C# 的委托函数,十分令人愉快。