Интернет магазин китайских планшетных компьютеров



Компьютеры - Microsoft OLE Automation - Детали

01 мая 2011


Оглавление:
1. Microsoft OLE Automation
2. Детали



Технология определяет те COM интерфейсы, через которые интерпретатор языка будет общаться с объектом.

Технология поддерживает:

  • свойства, методы и события
  • свойство или метод по умолчанию
  • необязательные и именованные аргументы методов
  • аргументы методов «по значению» и «по ссылке».

Типы данных OLE Automation:

  • целые
  • плавающая точка
  • дата/время DATE — дробное число дней с некоего момента
  • строка BSTR. Строка UTF-16 с завершающим нулем, аллоцированная специальным аллокатором в oleaut32.dll, освобождается вызовом SysFreeString.
  • указатель IUnknown на объект OLE Automation
  • массив SAFEARRAY. Может быть многомерным. Аллоцируется и освобождается семейством вызовов SafeArrayXxx в oleaut32.dll, можно получить на него указатель как на массив Си.
  • вариант VARIANT. Union с полем, указывающим тип — один из указанных выше, или другой VARIANT, или ссылка на один из этих типов

Другие типы данных технологией не поддерживаются.

Также технология поддерживает type libraries — информацию о типах свойств/методов/аргументов, доступную во время выполнения.

Обычно технология разрешает имена свойств и методов при исполнении, никак не проверяя их на этапе разбора, и возбуждая ошибку «объект не поддерживает свойство или метод» только при исполнении. Однако, если у объекта есть type library, зарегистрированная на машине, то в некоторых средах разработки можно объявить его так, что имена будут проверяться на этапе разбора. В Visual Basic это делалось операторами Dim o As Object или же Dim o As Excel.Application.

На уровне языков Си/Си++ вызов OLE Automation выглядит как вызов IDispatch::Invoke, куда передаются преобразованные в константы строковые имена метода/свойства/аргументов, и значения аргументов, преобразованных в типы OLE Automation. Это крайне неудобно и вызывает расходы произодительности, потому у многих объектов реализованы т. н. дуальные интерфейсы — потомки IDispatch, реализующие и Invoke, ровно тот же функционал через обычные COM методы. При этом сохраняется ограничение на типы данных, приведенное выше. Библиотека ATL содержит в себе фреймворк поддержки дуальных интерфейсов.

Компилятор Microsoft C++ поддерживает директиву #import — включение type library. При этом из исходного файла генерируются автоматически заголовки Си++, использующие средства comdef.h.

Цикл разработки объектов:

  • проектирование интерфейсов, с учетом ограничения на типы данных.
  • написание IDL файла.
  • написание классов, реализующих интерфейсы, объявленные в IDL.

Цикл построения объектов:

  • midl.exe компилирует IDL, создавая бинарный файл .tlb, заголовок Си/Си++ и .c файл, в котором объявлены все GUIDы из IDL
  • .c файл с GUIDами строится вместе с проектом
  • заголовок включается в .c/.cpp файлы, содержащие реализацию класса
  • link.exe может вшить .tlb в создаваемый исполняемый файл




Просмотров: 1698


<<< ISAPI
Microsoft Web Platform Installer >>>