COM Data Types

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