C#主要通过命名空间System.Runtime.InteropSerivces中的关键字DllImport关键字来实现调用C++函数,参数的引用传递则通过序列化来实现(ref/out关键字及IntPtr指针类型),结构体的序列化采用StructLayout标签。
1. 使用DllImport关键字来调用C++函数,所声明的函数必须为static exten类型:
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern bool IsWindowVisible(IntPtr hwnd);
[DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr GetModuleHandle(string name);
static void Main(string[] args)
{
IntPtr handle = GetModuleHandle(null);
Console.WriteLine("handle:{0},visible:{1}",handle,IsWindowVisible(handle));
Console.ReadLine();
}
2. 当我们用结构体获取函数调用结果时,必须确定结构体中数组的大小,并进行规定,通过ref/out声明引用类型参数,In、Out用于自描述功能:
public static e