• C#中导入Win32 API函数


    C#中导入Win32 API的方法:


    1、引用命名空间

    using System.Net.Security;

    using System.Runtime.InteropServices;

    2、

    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError =true]    
    
    static extern Boolean InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved); 




    把一些参数类型做相应的转化。

    关于导入时参数的说明:

    CharSet:

        枚举类型,

        Ansi :   以多字节字符串的形式封送字符串。
        Unicode  :  以 Unicode 2 字节字符形式封送字符串。
        Auto  :  针对目标操作系统适当地自动封送字符串。 在 Windows NT、Windows 2000、Windows XP 和 Windows Server 2003 系列上,默认值为 Unicode;在 Windows 98 和 Windows Me 上,默认值为 Ansi。 尽管公共语言运行时默认值为 Auto,但使用语言可重写此默认值。 例如,默认情况下,C# 将所有方法和类型都标记为 Ansi。

    EntryPoint:是指要导出来的API函数的入口地址,值是API的名字,这种情况适用于自己定义的方法名和原API名不相同。

       [DllImport("user32.dll",CharSet="CharSet.Auto",EntryPoint="MessageBox")]
      public static extern int MsgBox(IntPtr hWnd,string txt,string caption, int type);//名字不同了
    SetLastError:

             true指示被调用方将调用 SetLastError;否则为 false默认值为 false

              运行时管理器将调用 GetLastError 并缓存返回的值,以防其被其他 API 调用覆盖

    3、导入函数使用的代码位置:在类的内部。不是在命名空间内。

    4、参数类型在VC和VC#中的对应关系,从网上找到:

    BOOL=System.Int32
    
    BOOLEAN=System.Int32
    
    BYTE=System.UInt16
    
    CHAR=System.Int16
    
    COLORREF=System.UInt32
    
    DWORD=System.UInt32
    
    DWORD32=System.UInt32
    
    DWORD64=System.UInt64
    
    FLOAT=System.Float
    
    HACCEL=System.IntPtr
    
    HANDLE=System.IntPtr
    
    HBITMAP=System.IntPtr
    
    HBRUSH=System.IntPtr
    
    HCONV=System.IntPtr
    
    HCONVLIST=System.IntPtr
    
    HCURSOR=System.IntPtr
    
    HDC=System.IntPtr
    
    HDDEDATA=System.IntPtr
    
    HDESK=System.IntPtr
    
    HDROP=System.IntPtr
    
    HDWP=System.IntPtr
    
    HENHMETAFILE=System.IntPtr
    
    HFILE=System.IntPtr
    
    HFONT=System.IntPtr
    
    HGDIOBJ=System.IntPtr
    
    HGLOBAL=System.IntPtr
    
    HHOOK=System.IntPtr
    
    HICON=System.IntPtr
    
    HIMAGELIST=System.IntPtr
    
    HIMC=System.IntPtr
    
    HINSTANCE=System.IntPtr
    
    HKEY=System.IntPtr
    
    HLOCAL=System.IntPtr
    
    HMENU=System.IntPtr
    
    HMETAFILE=System.IntPtr
    
    HMODULE=System.IntPtr
    
    HMONITOR=System.IntPtr
    
    HPALETTE=System.IntPtr
    
    HPEN=System.IntPtr
    
    HRGN=System.IntPtr
    
    HRSRC=System.IntPtr
    
    HSZ=System.IntPtr
    
    HWINSTA=System.IntPtr
    
    HWND=System.IntPtr
    
    INT=System.Int32
    
    INT32=System.Int32
    
    INT64=System.Int64
    
    LONG=System.Int32
    
    LONG32=System.Int32
    
    LONG64=System.Int64
    
    LONGLONG=System.Int64
    
    LPARAM=System.IntPtr
    
    LPBOOL=System.Int16[]
    
    LPBYTE=System.UInt16[]
    
    LPCOLORREF=System.UInt32[]
    
    LPCSTR=System.String
    
    LPCTSTR=System.String
    
    LPCVOID=System.UInt32
    
    LPCWSTR=System.String
    
    LPDWORD=System.UInt32[]
    
    LPHANDLE=System.UInt32
    
    LPINT=System.Int32[]
    
    LPLONG=System.Int32[]
    
    LPSTR=System.String
    
    LPTSTR=System.String
    
    LPVOID=System.UInt32
    
    LPWORD=System.Int32[]
    
    LPWSTR=System.String
    
    LRESULT=System.IntPtr
    
    PBOOL=System.Int16[]
    
    PBOOLEAN=System.Int16[]
    
    PBYTE=System.UInt16[]
    
    PCHAR=System.Char[]
    
    PCSTR=System.String
    
    PCTSTR=System.String
    
    PCWCH=System.UInt32
    
    PCWSTR=System.UInt32
    
    PDWORD=System.Int32[]
    
    PFLOAT=System.Float[]
    
    PHANDLE=System.UInt32
    
    PHKEY=System.UInt32
    
    PINT=System.Int32[]
    
    PLCID=System.UInt32
    
    PLONG=System.Int32[]
    
    PLUID=System.UInt32
    
    PSHORT=System.Int16[]
    
    PSTR=System.String
    
    PTBYTE=System.Char[]
    
    PTCHAR=System.Char[]
    
    PTSTR=System.String
    
    PUCHAR=System.Char[]
    
    PUINT=System.UInt32[]
    
    PULONG=System.UInt32[]
    
    PUSHORT=System.UInt16[]
    
    PVOID=System.UInt32
    
    PWCHAR=System.Char[]
    
    PWORD=System.Int16[]
    
    PWSTR=System.String
    
    REGSAM=System.UInt32
    
    SC_HANDLE=System.IntPtr
    
    SC_LOCK=System.IntPtr
    
    SHORT=System.Int16
    
    SIZE_T=System.UInt32
    
    SSIZE_=System.UInt32
    
    TBYTE=System.Char
    
    TCHAR=System.Char
    
    UCHAR=System.Byte
    
    UINT=System.UInt32
    
    UINT32=System.UInt32
    
    UINT64=System.UInt64
    
    ULONG=System.UInt32
    
    ULONG32=System.UInt32
    
    ULONG64=System.UInt64
    
    ULONGLONG=System.UInt64
    
    USHORT=System.UInt16
    
    WORD=System.UInt16
    
    WPARAM=System.IntPtr


  • 相关阅读:
    基于Lumisoft.NET组件开发碰到乱码等一些问题的解决
    Winform开发框架之混合型框架的剖析
    Winform开发框架之通用人员信息管理
    Database2Sharp之混合型Winform框架代码生成
    python3 小技巧(2)
    Python小技巧1
    详解Python模块导入方法
    常见HTTP状态(304,200等)
    python win32api 使用小技巧
    python3下的IE自动化模块PAMIE
  • 原文地址:https://www.cnblogs.com/ddx-deng/p/3755848.html
Copyright © 2020-2023  润新知