When calling between the runtime environment and existing COM interfaces, the CLR performs automatic data marshaling for CLR types into compatible COM types. Table C-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 |
Single |
double |
Double |
decimal |
DECIMAL |
object |
VARIANT |
string |
BSTR |
System.DateTime |
DATE[1] |
System.Guid |
GUID |
System.Currency |
CURRENCY |
1-dimensional arrays |
SAFEARRAY |
Value types |
Equivalently named struct |
enum |
Equivalently named enum |
interface |
Equivalently named interface |
class |
Equivalently named CoClass |
[1] COM dates are less precise, causing comparison problems.
C# modifier |
COM attribute |
---|---|
<no modifier> |
[in] |
out |
[out] |
ref |
[in, out] |
<return value> |
[out, retval] |
|