Appendix D. Data Marshaling

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.

Table D-1. C# type to COM 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

DATE[a]

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 CoClass

[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.

Table D-2. C# modifier/COM attribute mapping

C# modifier

COM attribute

<no modifier>

[in]
out
[out]
ref
[in, out]

<return value>

[out, retval]

Get C# Essentials, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.