• 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 位

  • 相关阅读:
    大话计算机网络一 聊聊UDP
    Go调度器系列(2)宏观看调度器
    Go语言高阶:调度器系列(1)起源
    gin+go-micro+etcd实战一
    记录一次云主机部署openstack的血泪史
    paste deploy 学习笔记
    Openstack计算Nova组件
    jumpserver docker简单搭建
    [原创][开源] SunnyUI.Net 帮助文档目录
    [原创][开源]SunnyUI.Net, C# .Net WinForm开源控件库、工具类库、扩展类库、多页面开发框架
  • 原文地址:https://www.cnblogs.com/KimhillZhang/p/2890683.html
Copyright © 2020-2023  润新知