На этом шаге мы рассмотрим маршалинг 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.
На следующем шаге мы рассмотрим специальный маршалинг.