Non-Isomorphic have different or sometimes ambiguous representations in the managed and unmanaged worlds. These types are considered Non-Isomorphic because they may require conversion when marshaled between managed and unmanaged code. For example, managed strings are non-isomorphic types because they can have several different unmanaged representations, some of which may require conversion. Table 3 shows the complete list of non-isomorphic element types supported by the runtime along with the respective language types used to represent those element types in VB, MC++ and C#. Section 5 of this document describes how to use the MarshalAs attribute to control the marshaling behavior for non-isomorphic types.
Isomorphic Types | VB | MC++ | C# |
---|---|---|---|
ELEMENT_TYPE_BOOLEAN | Boolean | Bool | Bool |
ELEMENT_TYPE_CHAR | |||
ELEMENT_TYPE_STRING | String | String | String |
ELEMENT_TYPE_OBJECT | |||
ELEMENT_TYPE_CLASS | Class | Class | Class |
ELEMENT_TYPE_VALUETYPE | UDT | [value] class | struct |
ELEMENT_TYPE_ARRAY | |||
ELEMENT_TYPE_SZARRAY |
Table 3. Non-Isomorphic element types and their respective language representation