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 位