Диспетчерські інтерфейси і автоматизація, блог про шифрування

Автоматизація це інший спосіб управління компонентом. Автоматизація - надбудова над 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-інтерфейсу:

Схожі статті