Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСиСП. Часть 3. Контрольная работа 1.doc
Скачиваний:
39
Добавлен:
01.04.2014
Размер:
238.59 Кб
Скачать
  1. Службы Platform Invoke

Службы Platform Invoke позволяют управляемому коду запускать функции неуправляемого кода, которые находятся в файлах библиотек динамической компоновки (DLL). Эти службы предоставляют механизмы обнаружения и запуска неуправляемых функций и преобразование типов данных входящих и исходящих аргументов функции. Когда управляемый код запускает функцию неуправляемого кода, локализованную в DLL-файле, службы Platform Invoke находят этот DLL файл, загружают его в оперативную память и находят адрес функции в памяти. После этого службы передают входящие аргументы функции в стек, преобразовывают данные, которые необходимо перевести, эмулируют сборку мусора и передают управление по адресу неуправляемой функции в памяти.

    1. Службы com Interoperability

Объектная модель COM (Common Object Model) компонентов имеет некоторые существенные отличия от объектной модели компонентов .NET Framework.

  • Управление жизненным циклом объектов. Клиенты СОМ-объектов сами управляют этим циклом, среда CLR платформы .NET берет эту задачу на себя.

  • Обращение к службам и объектам. Клиенты COM-объектов узнают о функциональности службы путем опроса ее интерфейса, клиенты .NET-объектов могут получить описание функциональности, используя пространство имен Reflection.

  • Среда CLR перемещает объекты в памяти для улучшения производительности, обновляя ссылки этих объектов. Клиенты COM имеют постоянную ссылку на ячейки памяти, не изменяющуюся в течение всей жизни объекта.

Для преодоления этих различий CLR предлагает классы-оболочки, которые позволяют управляемым и неуправляемым клиентам думать, что они работают с объектами той же среды, что и они сами. Когда управляемый клиент вызывает неуправляемый метод, CLR создает временную оболочку RCW (Runtime Callable Wrapper). RCW абстрагирует различия между управляемым и неуправляемым кодом. CLR также создает оболочку CCW (COM Callable Wrapper) для обращения процесса, которая позволяет COM-объектам запускать методы .NET-объектов.

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

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

  • System.Byte

  • System.SByte

  • System.Int16

  • System.UInt16

  • System.Int32

  • System.UInt32

  • System.Int64

  • System.IntPtr

  • System.UintPtr

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

Таблица 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. Используя атрибуты, вы можете настроить перевод из одного типа в другой.