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