Шаг 154.
Среда программирования Visual C++.
Архитектура СОМ. Маршалинг. Использование маршалера Automation

    На этом шаге мы рассмотрим маршалинг Automation.

    Маршалер Automation - это СОМ-сервер (oleaut32.dll), предоставляющий услуги по маршалингу в СОМ-технологии, известной как Automation (раньше ее называли OLE Automation). Она позволяет взаимодействовать с СОМ-компонентами клиентам, написанным на отличных от C++ языках. Маршалер Automation реализован в СОМ-интерфейсе IDispatch (подробнее о нем - на следующих шагах). Чтобы пользоваться им, не требуется создавать диспетчерский интерфейс - достаточно указать, что интерфейсы Вашего компонента используют маршалер Automation, задав их IDL-атрибутом oleautomation, как показано ниже:

[
  oleautomation,
  object,
  uuid(A84DA762-6486-11D3-9347-0080C7FA0C3E),
  helpstring("IHello Interface"),
  pointer_default(unique) 
]

interface IHello  :  IUnknown
{
  [ propget,   helpstring("property String") ] HRESULT
  String([out, retval] BSTR *pVal);
};

    Для реализации взаимодействия между различными языками в Automation определен стандартный набор типов данных, которые можно поместить в объединение (union) VARIANT. Пользуясь маршалером Automation, Вы должны употреблять только допустимые в ней типы данных. Тип данных BSTR в предыдущем фрагменте кода - это спользуемый Automation строковый тип.

    Маршалер Automation не столь эффективен по сравнению с кодом стандартного маршалинга, созданного компилятором MIDL.

    На следующем шаге мы рассмотрим специальный маршалинг.




Предыдущий шаг Содержание Следующий шаг