When calling between the runtime environment and existing COM interfaces, the CLR performs automatic data marshaling for CLR types into compatible COM types.
Table D-1 describes the C# to COM default data type mapping.
C# type | COM type |
bool | VARIANT_BOOL |
char | unsigned short |
sbyte | char |
byte | unsigned char |
short | short |
ushort | unsigned short |
int | int |
uint | unsigned int |
long | hyper |
ulong | unsigned hyper |
float | float |
double | double |
decimal | DECIMAL |
object | VARIANT, IUnknown*, IDispatch* |
string | BSTR |
System.DateTime |
|
System.Guid | GUID |
System.Decimal | CURRENCY |
1-dimensional arrays | SAFEARRAY |
Value types | Equivalently named struct |
enum | Equivalently named enum |
interface | Equivalently named interface |
class | Equivalently named |
[a] COM dates are less precise, causing comparison problems. |
Table D-2 shows the mapping of the C# modifiers to their equivalent COM interface attributes.