Автоматизація це інший спосіб управління компонентом. Автоматизація - надбудова над COM.
Сервер Автоматизації - це компонент СОМ, який реалізує інтерфейс IDispatch.
Контролер Автоматизації - це клієнт СОМ, який взаємодіє з сервером через інтерфейс IDispatch. (Для виклики функцій сервера використовує функції члени інтерфейсу - неявний виклик).
Спочатку Автоматизація розроблялася для Visual Basic.
Майже будь-який сервіс, представимо через інтерфейси COM може бути представлений і через IDispatch.
інтерфейс IDispatch
IDispatch надає доступ до всіх сервісів через один єдиний інтерфейс.
IDispatch можна використовувати для здійснення функції по трьом параметрам: ProgID компонента, імені функції і її аргументів.
Інтерфейс IDispatch має наступне формальне опис:
interfaceIDispatch. IUnknown // з файлу OAidl.idl
HRESULT GetTypeInfoCount ([out] UINT * pctinfo);
HRESULT GetTypeInfo ([in] UINT iTInfo,
[In] LCID lsid ;;
[Out] ITypeInfo ** ppTInfo);
HRESULT GetIDsOfName ([in] REFIID riid, // Приймає ім'я функції і
// повертає її
[In, size_is (cNames)] LPOLESTR * rgszNames, // Диспетчерський
// ідентифікатор
[In] UINT cNames,
[In] LCID lcid,
[Out, size_is (cNames)] DISPID * rgDispId); // DISPID це довге
// LONG і не унікально
// У кожної реалізації IDispatch є свій власний IID (іноді називається DIID).
HRESULT Invoke ([in] DISPID dispIdMember, // Контролер автоматизації
[In] REFIID riid, // передає DISPID спричиненої
// функції в Invoke
[In, out] DISPPARAMS * pDispParams,
[Out] VARIANT * pVarResult,
[Out] EXEPINFO * pExcepinfo,
[Out] UINT * puArgErr
DISPID використовується функцією-членом Invoke як індекс в масиві покажчиків на функції. Однак, сервер Автоматизації не зобов'язаний реалізовувати Invoke саме таким чином. Він може використовувати звичайний оператор switch.
IDispatch :: Invoke реалізує набір функцій, доступ до яких здійснюється за індексом.
Набір функцій, реалізованих за допомогою IDispatch :: Invoke називається диспетчерським інтерфейсом (disp-інтерфейсом)
Реалізація IDispatch :: Invoke визначає набір функцій, за допомогою яких взаємодію сервер і контролер автоматизації.
Приклад можливої реалізації DISP-інтерфейсу: