平台调用(P/Invoke),主要用来调用windows API函数(非托管代码)
调用方法:DllImportAttribute、COM Interop
下表将说明 Win32 API 中几个常用的 DLL。(有关 Win32 API 的全部文档,请参见 Platform SDK)
DLL | 内容说明 |
---|---|
GDI32.dll |
用于设备输出的图形设备接口 (GDI) 函数,例如用于绘图和字体管理的函数。 |
Kernel32.dll |
用于内存管理和资源处理的低级别操作系统函数。 |
User32.dll |
用于消息处理、计时器、菜单和通信的 Windows 管理函数。 |
下表列出了所有与平台调用相关的属性字段:
字段 | 说明 |
---|---|
切换最适合的映射。 |
|
指定用于传递方法参数的调用约定。默认值为 WinAPI,该值对应于基于 32 位 Intel 的平台的 __stdcall。 |
|
控制名称重整以及将字符串参数封送到函数中的方式。默认值为 CharSet.Ansi。 |
|
指定要调用的 DLL 入口点(重命名函数)。 |
|
控制是否应修改入口点以对应于字符集。对于不同的编程语言,默认值将有所不同。 |
|
控制托管方法签名是否应转换成返回 HRESULT 并且返回值有一个附加的 [out, retval] 参数的非托管签名。 默认值为 true(不应转换签名)。 |
|
使调用方能够使用 Marshal.GetLastWin32Error API 函数来确定在执行该方法时是否出错。在 Visual Basic 中,默认值为 true;在 C# 和 C++ 中,默认值为 false。 |
|
控制对转换为 ANSI '?' 字符的不可映射的 Unicode 字符引发异常。 |

using System; using System.Runtime.InteropServices; class Example { // Use DllImport to import the Win32 MessageBox function. [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); static void Main() { // Call the MessageBox function using platform invoke. MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0); } }
msdn参考:http://msdn.microsoft.com/zh-cn/library/aa686045.aspx
博客园参考:http://www.cnblogs.com/lifeil/archive/2013/02/19/2917340.html
http://www.cnblogs.com/namek/archive/2010/08/24/1807428.html