zoukankan      html  css  js  c++  java
  • C#中调用Windows API时的数据类型对应关系

    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  

    C++            C#
    =====================================
    WORD              ushort
    DWORD             uint
    UCHAR             int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte
    UCHAR*            string/IntPtr
    unsigned char*    [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
    char*             string/StringBuilder
    LPCTSTR           string
    LPTSTR            [MarshalAs(UnmanagedType.LPTStr)] string
    long              int
    ulong             uint
    Handle            IntPtr
    HWND              IntPtr
    void*             IntPtr
    int               int
    int*              ref int
    *int              IntPtr
    unsigned int      uint
    COLORREF          uint

    附:举一个声明API的例子  

    [ DllImport( "Kernel32.dll" )]

     public static extern System.UInt32 VirtualAllocEx(

     System.IntPtr hProcess,  

    System.UInt32 lpAddress,  

    System.UInt32 dwSize,  

    System.UInt32 flAllocationType,  

    System.UInt32 flProtect

     );

    转:http://www.cnblogs.com/ausoldier/archive/2007/12/07/986141.html

    Wtypes.h 中的非托管类型 非托管 C 语言类型 托管类名 说明

    HANDLE

    void*

    System.IntPtr

    在 32 位 Windows 操作系统上为 32 位,在 64 位 Windows 操作系统上为 64 位。

    BYTE

    unsigned char

    System.Byte

    8 位

    SHORT

    short

    System.Int16

    16 位

    WORD

    unsigned short

    System.UInt16

    16 位

    INT

    int

    System.Int32

    32 位

    UINT

    unsigned int

    System.UInt32

    32 位

    LONG

    long

    System.Int32

    32 位

    BOOL

    long

    System.Int32

    32 位

    DWORD

    unsigned long

    System.UInt32

    32 位

    ULONG

    unsigned long

    System.UInt32

    32 位

    CHAR

    char

    System.Char

    用 ANSI 修饰。

    LPSTR

    char*

    System.String 或 System.Text.StringBuilder

    用 ANSI 修饰。

    LPCSTR

    Const char*

    System.String 或 System.Text.StringBuilder

    用 ANSI 修饰。

    LPWSTR

    wchar_t*

    System.String 或 System.Text.StringBuilder

    用 Unicode 修饰。

    LPCWSTR

    Const wchar_t*

    System.String 或 System.Text.StringBuilder

    用 Unicode 修饰。

    FLOAT

    Float

    System.Single

    32 位

    DOUBLE

    Double

    System.Double

    64 位

  • 相关阅读:
    poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
    poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
    poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
    hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
    hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
    Gym 100512F Funny Game (博弈+数论)
    UVa 12714 Two Points Revisited (水题,计算几何)
    UVa 12717 Fiasco (BFS模拟)
    UVa 12718 Dromicpalin Substrings (暴力)
    UVa 12716 && UVaLive 6657 GCD XOR (数论)
  • 原文地址:https://www.cnblogs.com/KimhillZhang/p/2890683.html
Copyright © 2011-2022 走看看