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