[转]DllImport属性详解
DllImport属性详解(http://blog.csdn.net/yyz_2637/article/details/5340365) API函数是构筑Windows的基石, 是Windows编程的必备利器。每一种Windows应用程序开发工具都提供间接或者直接的方式调用Win32API,C#也不例外。使用Win32API的一个好处就是,我们可以实现更多的功能。 首先,要引入命名空间:using System.Runtime.InteropServices; 然后,声明在程序中所要用到的API函数。注意方法体为空。 DllImport属性用于指定包含外部方法的实现的dll位置。 (1)DllImport属性只能放在方法声明上。 (2)DllImport具有单个定位参数:指定包含被导入方法的dll名称的dllName参数。 (3)DllImport具有6个命名参数: a、CallingConvention参数:指示入口点的调用约定,如果未指定CallingConvention,则使用默认值CallingConvention.Winapi; b、CharSet参数:指示用在入口点种的字符集。如果未指定CharSet,则使用默认值CharSet.Auto; c、EntryPoint参数:给出所声明的方法在dll中入口点的名称。如果未指定EntryPoint,则使用方法本身的名称; d、ExactSpelling参数:指示EntryPoint是否必须与指示的入口点的拼写完全匹配。如果未指定ExactSpelling,则使用默认值false; e、PreserveSig参数:指示方法的签名应被应当被保留还是被转换。当签名被转换时,它被转换为一个具有HRESULT返回值和该返回值的一个名为retval的附加输出参数签名。如果未指定PreserveSig,则使用默认值false; f、SetLastError参数:指示方法是否保留Win32上的错误,如果未指定SetLastError,则使用默认值false。 DllImport是一次性属性类,而且用DllImport修饰的方法必须具有extern修饰符。 例子:[DllImport("kernel32")] private static extern void GetWindowsDirectory(StringBuilder WinDir,int count); [DllImport("user32.dll",EntryPoint = "FlashWindow")] private static extern bool FlashWindow(IntPtr hWnd,bool bInvert); [DllImport("ws2_32.dll")] private static extern int inet_addr(string cp); [DllImport("IPHLPAPI.dll")] private static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 pMacAddr, ref Int32 PhyAddrLen);