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