The following table shows data types used in COM and their corresponding .NET Framework built-in value types or classes. Any type not explicitly identified in this table is converted to an Int32 system type. For corresponding types in Visual Basic .NET, C#, and the Managed Extensions for C++, see the Introduction to the .NET Framework Class Library.
| COM value type | COM reference type | System type | 
|---|---|---|
| bool | bool * | System.Int32 | 
| char, small | char *, small * | System.SByte | 
| short | short * | System.Int16 | 
| long, int | long *, int * | System.Int32 | 
| Hyper | hyper * | System.Int64 | 
| unsigned char, byte | unsigned char *, byte * | System.Byte | 
| wchar_t, unsigned short | wchar_t *, unsigned short * | System.UInt16 | 
| unsigned long, unsigned int | unsigned long *, unsigned int * | System.UInt32 | 
| unsigned hyper | unsigned hyper * | System.UInt64 | 
| float | float * | System.Single | 
| double | double * | System.Double | 
| VARIANT_BOOL | VARIANT_BOOL * | System.Boolean | 
| void * | void ** | System.IntPtr | 
| HRESULT | HRESULT * | System.Int16 or System.IntPtr | 
| SCODE | SCODE * | System.Int32 | 
| BSTR | BSTR * | System.String | 
| LPSTR or [string, ...] char * | LPSTR * | System.String | 
| LPWSTR or [string, ...] wchar_t * | LPWSTR * | System.String | 
| VARIANT | VARIANT * | System.Object | 
| DECIMAL | DECIMAL * | System.Decimal | 
| DATE | DATE * | System.DateTime | 
| GUID | GUID * | System.Guid | 
| CURRENCY | CURRENCY * | System.Decimal | 
| IUnknown * | IUnknown ** | System.Object | 
| IDispatch * | IDispatch ** | System.Object | 
| SAFEARRAY(type) | SAFEARRAY(type) * | type[] | 
The following table lists COM value and reference types that convert to corresponding element types. For example, a COM coclass automatically maps to a managed class with the same name.
| COM value type | COM reference type | Element type | 
|---|---|---|
| typedef BaseType MyType | ByRef BaseType | BaseType | 
| MyStruct | ByRef VALUETYPE<MyStruct> | valuetype<MyStruct> | 
| MyEnum | ByRef VALUETYPE<MyEnum> | valuetype<MyEnum> | 
| MyInterface * | ByRef CLASS <MyInterface> | Class <MyInterface> | 
| MyCoClass | ByRef CLASS <_Class> | class <_Class> | 
See Also
Marshaling Data with COM Interop | Customizing COM Callable Wrappers | Customizing Runtime Callable Wrappers