
Інтерфейс idispatch
Базовий інтерфейс автоматизації (інтерфейс диспетчеризації) називається IDispatch і являє собою COM-інтерфейс, що є спадкоємцем інтерфейсу IUnknown. Відмінність інтерфейсу диспетчеризації від звичайного СОМ-інтерфейсу полягає в способі виклику методів інтерфейсу, які викликаються за допомогою спеціального методу Invoke. Об'єкт автоматизації обов'язково повинен мати додатковий інтерфейс, в якому зазначаються всі методи, доступні через метод Invoke. Кожному методу цього інтерфейсу відповідає ідентифікатор, який називається ідентифікатором диспетчеризації (dispatch identifier, dispid). Реалізація цього методу подібна оператору case: на основі зазначеного ідентифікатор диспетчеризації вибирається метод, який повинен бути виконаний. Завдяки такій організації об'єкту автоматизації потрібно всього одна таблиця віртуальних методів - для інтерфейсу IDispatch. Всі інші методи виклиються за допомогою методу Invoke цього інтерфейсу.
Створення серверів автоматизації в delphi
Створення сервера автоматизації в Delphi в цілому подібно створенню СОМ-сервера. Однак об'єкти автоматизації володіють рядом додаткових функціональних можливостей, а їх створення має ряд особливостей.
Об'єкт автоматизації в Delphi створюється на основі класу TAutoObject, який є нащадком класу TTypedCOMObject.
Розглянемо приклад створення сервера автоматизації. Як приклад створимо об'єкт автоматизації, що виконує ті ж функції, що і розглянутий раніше COM-об'єкт. Даний об'єкт автоматизації включимо до складу зовнішнього сервера. Створення зовнішнього сервера автоматизації в Delphi включає виконання наступних кроків.
1. Створення нового додатка-сервера.
2. Створення об'єкта автоматизації.
3. Створення інтерфейсів, а також заголовків методів і властивостей інтерфейсів об'єкта автоматизації.
4. Програмування методів інтерфейсу.
Як бачите, процес створення сервера автоматизації включає ті ж дії, що й процес створення СОМ-сервера.
СТВОРЕННЯ ДОДАТКА-СЕРВЕРА
Додаток-сервер автоматизації являє собою звичайний додаток, що включає в себе, принаймні, один об'єкт автоматизації. Створення такого додатки не має ніяких особливостей. Як і в попередньому випадку, процес створення сервера автоматизації починається з команди File ► New Application головного меню IDE Delphi.
СТВОРЕННЯ ОБ'ЄКТА АВТОМАТИЗАЦІЇ
Після того як додаток-сервер створено, слід включити в нього новий об'єкт автоматизації. Для цього виберіть команду File ► New, потім у вікні діалогу New Items перейдіть на вкладку ActiveX і клацніть на значку Automation Object (див. рис. 18.1).
Після клацання на кнопці ОК у вікні діалогу New Items проводиться запуск майстра створення об'єкта автоматизації, у вікні якого необхідно задати параметри створюваного об'єкту (рис. 18.7).
Рис. 18.7. Вікно майстра створення об'єкта автоматизації
□ У полі CoClass Name вводиться ім'я класу об'єкта автоматизації (в нашому прикладі назвемо клас TestAuto).
□ У списку Instancing, як і у випадку COM-сервера, вибирається спосіб створення об'єкту автоматизації.
□ У списку Threading Model, як і у випадку COM-сервера, вибирається варіант роботи сервера з потоками.
□ Прапорець Generate event support code визначає, чи повинен створюваний об'єкт автоматизації підтримувати обробки подій.
Після клацання на кнопці ОК у вікні Automation Object Wizard буде створений новий об'єкт автоматизації і відкриється вікно редактора бібліотеки типів. Якщо проглянути текст модуля об'єкта автоматизації (у нашому прикладі назвемо його AutoObjectUnit), то навіть при побіжному погляді видно, що міститься в ньому код не складніше, ніж в модулі «порожнього» СОМ-об'єкту:
unit AutoObjectUnit;
interface
uses
ComObj. ActiveX. AutoServer_TLB. StdVcl; type
TTestAuto = class(TAutoObject. ITestAuto) protected
{ Protected declarations } end:
implementation
uses ComServ:
initialization TAutoObjectFactory.Create(ComServer. TTestAuto.
Class_TestAuto,ciMulti Instance, tmApartment):
end.