Обзор механизма преобразования
Механизм преобразования определяет, какие типы данных должны быть переданы в метод и возвращены методом из управляемого в неуправляемый код и наоборот. Большинство типов данных имеют свои аналоги как в управляемом, так и в неуправляемом коде. Они не нуждаются в конвертировании при передаче из одной среды в другую. В пространстве имен System такими типами данных являются следующие:
- System.Byte
- System.SByte
- System.Int16
- System.UInt16
- System.Int32
- System.UInt32
- System.Int64
- System.IntPtr
- System.UintPtr
Но есть и такие типы данных, которые имеют неоднозначное значение в управляемом и неуправляемом языках программирования. Эти типы нуждаются в конвертировании при переходе из управляемого в неуправляемый код и наоборот. Например, управляемая строка (string) имеет несколько значений в неуправляемом коде. В таблице 5.1 представлен список типов данных, которые нуждаются в конвертировании при переходе из одной среды в другую.
System.Array | C-style или SAFEARRAY |
System.Boolean | 1-, 2- или 4-битовое значение со значением true как 1 или –1 |
System.Char | Символ кодировки ANSI или Unicode |
System.Class | Интерфейс class |
System.Object | Различные интерфейсы |
System.Mdarray | C-style или SAFEARRAY |
System.String | Строка с завершающим нулем (null-terminated string) или BSTR |
System.Valuetype | Структура |
System.Szarray | C-style или SAFEARRAY |
В большинстве случаев стандартные RCW и CCW, сгенерированные средой выполнения, предоставляют соответствующее преобразование типов между компонентами COM и .NET Framework. Используя атрибуты, вы можете настроить перевод из одного типа в другой.