Creating this table took a while, but saved me hours…
| 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 | 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 |