| Windows Data Type | .NET Data Type |
|---|---|
| BOOL, BOOLEAN | Boolean or Int32 |
| BSTR | String |
| BYTE | Byte |
| CHAR | Char |
| DOUBLE | Double |
| DWORD | Int32 or UInt32 |
| FLOAT | Single |
| HANDLE (and all other handle types, such as HFONT and HMENU) | IntPtr, UintPtr or HandleRef |
| HRESULT | Int32 or UInt32 |
| INT | Int32 |
| LANGID | Int16 or UInt16 |
| LCID | Int32 or UInt32 |
| LONG | Int32 |
| LPARAM | IntPtr, UintPtr or Object |
| LPCSTR | String |
| LPCTSTR | String |
| LPCWSTR | String |
| LPSTR | String or StringBuilder* |
| LPTSTR | String or StringBuilder |
| LPWSTR | String or StringBuilder |
| LPVOID | IntPtr, UintPtr or Object |
| LRESULT | IntPtr |
| SAFEARRAY | .NET array type |
| SHORT | Int16 |
| TCHAR | Char |
| UCHAR | SByte |
| UINT | Int32 or UInt32 |
| ULONG | Int32 or UInt32 |
| VARIANT | Object |
| VARIANT_BOOL | Boolean |
| WCHAR | Char |
| WORD | Int16 or UInt16 |
| WPARAM | IntPtr, UintPtr or Object |
另: 在进行string转换时,需要加入前缀[MarshalAs(UnmanagedType.LPStr)]lpdword 对应于 ref int
| C/C++ | C# |
|---|---|
| HANDLE, LPDWORD, LPVOID, void* | IntPtr |
| LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR | String [in], StringBuilder [in, out] |
| DWORD, unsigned long, Ulong | UInt32, [MarshalAs(UnmanagedType.U4)] |
| bool | bool |
| LP | [In] ref |
| SIZE_T | uint |
| LPDWORD | out uint |
| LPTSTR | [Out] StringBuilder |
| PULARGE_INTEGER | out ulong |
| WORD | uInt16 |
| Byte, unsigned char | byte |
| Short | Int16 |
| Long, int | Int32 |
| float | single |
| double | double |
| NULL pointer | IntPtr.Zero |
| Uint | Uint32 |
C#调用DLL文件时参数对应表
Wtypes.h中的非托管类型 非托管 C语言类型 托管类名 说明
HANDLE void* System.IntPtr 32 位
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.StringBuilder 用 ANSI 修饰。
LPCSTR Const char* System.String 或System.StringBuilder 用 ANSI 修饰。
LPWSTR wchar_t* System.String 或System.StringBuilder 用 Unicode 修饰。
LPCWSTR Const wchar_t* System.String 或System.StringBuilder 用 Unicode 修饰。
FLOAT Float System.Single 32 位
DOUBLE Double System.Double 64 位