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 4.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
Single
                        double
Double
                        decimal
DECIMAL
                        object
VARIANT
                        string
BSTR
System.DateTime

DATE [a]

                        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

[a] COM dates are less precise, causing comparison problems.

Table 4.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 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.