C++ 类型 和 C#类型 互转

400 阅读1分钟
Windows Data Type.NET Data Type
BOOL, BOOLEANBoolean or Int32
BSTRString
BYTEByte
CHARChar
DOUBLEDouble
DWORDInt32 or UInt32
FLOATSingle
HANDLE (and all other handle types, such as HFONT and HMENU)IntPtr, UintPtr or HandleRef
HRESULTInt32 or UInt32
INTInt32
LANGIDInt16 or UInt16
LCIDInt32 or UInt32
LONGInt32
LPARAMIntPtr, UintPtr or Object
LPCSTRString
LPCTSTRString
LPCWSTRString
LPSTRString or StringBuilder*
LPTSTRString or StringBuilder
LPWSTRString or StringBuilder
LPVOIDIntPtr, UintPtr or Object
LRESULTIntPtr
SAFEARRAY.NET array type
SHORTInt16
TCHARChar
UCHARSByte
UINTInt32 or UInt32
ULONGInt32 or UInt32
VARIANTObject
VARIANT_BOOLBoolean
WCHARChar
WORDInt16 or UInt16
WPARAMIntPtr, 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*, LPWSTRString [in], StringBuilder [in, out]
DWORD, unsigned long, UlongUInt32, [MarshalAs(UnmanagedType.U4)]
boolbool
LP[In] ref
SIZE_Tuint
LPDWORDout uint
LPTSTR[Out] StringBuilder
PULARGE_INTEGERout ulong
WORDuInt16
Byte, unsigned charbyte
ShortInt16
Long, intInt32
floatsingle
doubledouble
NULL pointerIntPtr.Zero
UintUint32

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 位