C#与C++之间类型的对应
最近在对接简单的硬件操作,通过C#调用的第三方封装的C++库,读取身份证,社保卡,特地查看了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<struct> | [In] ref <struct> |
| 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 |
原文地址:
编辑于 2021-07-16 15:28