天天看點

C++ 類型 和 C#類型 互轉

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