P/Invoke(C#)

平台调用(P/Invoke),主要用来调用windows API函数(非托管代码)

调用方法:DllImportAttributeCOM Interop

          

下表将说明 Win32 API 中几个常用的 DLL。(有关 Win32 API 的全部文档,请参见 Platform SDK) 

DLL内容说明

GDI32.dll

用于设备输出的图形设备接口 (GDI) 函数,例如用于绘图和字体管理的函数。

Kernel32.dll

用于内存管理和资源处理的低级别操作系统函数。

User32.dll

用于消息处理、计时器、菜单和通信的 Windows 管理函数。

下表列出了所有与平台调用相关的属性字段:

字段说明

BestFitMapping

切换最适合的映射。

CallingConvention

指定用于传递方法参数的调用约定。默认值为 WinAPI,该值对应于基于 32 位 Intel 的平台的 __stdcall

CharSet

控制名称重整以及将字符串参数封送到函数中的方式。默认值为 CharSet.Ansi

EntryPoint

指定要调用的 DLL 入口点(重命名函数)。

ExactSpelling

控制是否应修改入口点以对应于字符集。对于不同的编程语言,默认值将有所不同。

PreserveSig

控制托管方法签名是否应转换成返回 HRESULT 并且返回值有一个附加的 [out, retval] 参数的非托管签名。

默认值为 true(不应转换签名)。

SetLastError

使调用方能够使用 Marshal.GetLastWin32Error API 函数来确定在执行该方法时是否出错。在 Visual Basic 中,默认值为 true;在 C# 和 C++ 中,默认值为 false

ThrowOnUnmappableChar

控制对转换为 ANSI '?' 字符的不可映射的 Unicode 字符引发异常。

 

DllImport演示实例
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

演示参考: http://msdn.microsoft.com/zh-cn/aa446550.aspx

 

posted @ 2013-05-10 11:40  DoNetCoder  阅读(443)  评论(0编辑  收藏  举报