C#中调用Windows API时的数据类型对应关系
原文 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 位 |
轉載于:https://www.cnblogs.com/lonelyxmas/p/3492135.html
總結
以上是生活随笔為你收集整理的C#中调用Windows API时的数据类型对应关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记本屏幕多少钱啊?
- 下一篇: HDU-2020