Создание Windows-приложений на основе Visual C#

         

Обзор механизма преобразования


Механизм преобразования определяет, какие типы данных должны быть переданы в метод и возвращены методом из управляемого в неуправляемый код и наоборот. Большинство типов данных имеют свои аналоги как в управляемом, так и в неуправляемом коде. Они не нуждаются в конвертировании при передаче из одной среды в другую. В пространстве имен System такими типами данных являются следующие:

  • System.Byte
  • System.SByte
  • System.Int16
  • System.UInt16
  • System.Int32
  • System.UInt32
  • System.Int64
  • System.IntPtr
  • System.UintPtr

Но есть и такие типы данных, которые имеют неоднозначное значение в управляемом и неуправляемом языках программирования. Эти типы нуждаются в конвертировании при переходе из управляемого в неуправляемый код и наоборот. Например, управляемая строка (string) имеет несколько значений в неуправляемом коде. В таблице 5.1 представлен список типов данных, которые нуждаются в конвертировании при переходе из одной среды в другую.

Таблица 5.1. Конвертирование типов данных

Тип данныхТип при конвертировании
System.ArrayC-style или SAFEARRAY
System.Boolean1-, 2- или 4-битовое значение со значением true как 1 или –1
System.CharСимвол кодировки ANSI или Unicode
System.ClassИнтерфейс class
System.ObjectРазличные интерфейсы
System.MdarrayC-style или SAFEARRAY
System.StringСтрока с завершающим нулем (null-terminated string) или BSTR
System.ValuetypeСтруктура
System.SzarrayC-style или SAFEARRAY

В большинстве случаев стандартные RCW и CCW, сгенерированные средой выполнения, предоставляют соответствующее преобразование типов между компонентами COM и .NET Framework. Используя атрибуты, вы можете настроить перевод из одного типа в другой.



Содержание раздела