Объявления автоматизированных свойств и методов

OLE Automation - это разновидность механизма связи Object Linking and Embedding, позволяющего приложениям для Windows управлять друг другом. Автоматизированный OLE контроллер является приложением, которое способно автоматизировать другое приложение - автоматизированный OLE сервер. По существу, OLE Automation представляет собой протокол обмена, посредством которого контроллер управляет действиями сервера. Все компонентные OLE объекты, экспортируемые автоматизированным сервером своим контроллерам, являются производными от базового класса TAutoObject.

При создании автоматизированного сервера необходимо определить его интерфейс с контроллером, содержащий объявления свойств и методов OLE объекта с тем, чтобы контроллер получил к ним доступ. Никогда не удаляйте уже включенные в интерфейс свойства и методы - это приведет к ошибкам в работе существующих контроллеров. C++Builder использует модификатор _automated в объявлениях автоматизированного метода (Листинг 3.13). Это объявление может заканчиваться еще одним новым ключевым словом _dispid, которое ассоциирует значение идентификатора диспетчеризации OLE Automation с данной функцией.

class MyOLEAutoClass : TAutoObject

{ _automated: void_fastcall function(void) _dispid(1000); };

Листинг 3.13. Объявление автоматизированного метода.

Правила видимости, определяемые этим ключевым словом, не отличаются от правил видимости, объявленных в секцииpublic. Единственное отличие проявляется в том, что генерируемая компилятором информация о типах свойств и методов OLE Automation, делает возможным создание автоматизированных серверов.

C++Builder поставляется вместе с примером (удивительным по внешней простоте и лаконичности кода) взаимодействия приложений контроллера и сервера посредством механизма OLE Automation. Этот пример проливает свет на данную методику, изложенную в системной документации весьма сбивчиво и туманно. Автоматизированный сервер Autosrv демонстрирует использование:

• компонентных объектов TAutoObject и TAutoClassInfo;

• метода RegisterAutoClass автоматизированного объектного класса для регистрации сервера;

• свойств и методов, объявленных с ключевым словом _automated.Контроллер Autocon управляет сервером и демонстрирует:

• установку и выборку свойств объекта сервера;

• использование вариантов (детальная информация об типе Variant содержится в параграфе 3.6.1.6 "Расширенные типы данных Delphi".

Чтобы испытать на практике, что дает взаимодействие приложений OLE Automation, выполните следующие действия:

=> По команде главного менюFile [ Open Project откройте диалог выбора проектов. => Войдите в каталог \...\CBuilder\Examples\Apps\Autosrv => Выберите проектный файл с именем Autosrv и нажмите кнопкуOpen.

=> Командой главного менюRun | Run запустите процесс компиляции и сборки автоматизированного сервера. => Снова откройте диалог выбора проектов, войдите в каталог

\...\CBuilder\Examples\Apps\Autocon, выберите проектный файл с именем

Объявления автоматизированных свойств и методов - student2.ru Autocon и нажмите кнопкуOpen.=> Запустите процесс компиляции и сборки контроллера.

Вводя сообщения в области редактируемого ввода и нажимая кнопки контроллера, вы можете моделировать некоторые процессы управления сервером. получая результаты, которые отображены на нижеследующих рисунках:

Рис. 3.4. Контроллер готовит сообщение и посылает его серверу.

Объявления автоматизированных свойств и методов - student2.ru Рис. 3.5. Контроллер принимает сообщение, "обработанные" сервером Объявления автоматизированных свойств и методов - student2.ru

Рис. 3.6. Контроллер снимает старое сообщение с сервера.

Чтобы узнать, как реализовано такое взаимодействие, необходимо разобраться в текстах модулей автоматизированного сервера (Листинг 3.14 и Листинг 3.15) и контроллера (Листинг 3.16 и Листинг 3.17), которые заслуживают того, чтобы привести их целиком, снабдив необходимыми комментариями. Сервер содержит единственный объект Edit1 компоненты TEdit для редактируемого ввода и приема сообщений от контроллера в свойство Text. Контроллер записывает введенное пользователем сообщение в свойство Text своего объекта Edit1, а управляет сервером посредством трех кнопок Buttoni, Button2 и Buttons компоненты TButton (с названиями "Послать", "Принять" и "Очистить").

#ifndef Auto2H

#define Auto2H

ftinclude <Classes.hpp> ftinclude <01eAuto.hpp>

#include <System.hpp>

// Класс сервера ButtonServer. производный от TAutoOb-iect class ButtonServer: public TAutoObject {

private: // Приватные свойства и методы AnsiString _fastcall GetEditStr() ;

void _fastcall SetEditStr(AnsiString NewVal);

int _fastcall GetEditNum() ;

void _fastcall SetEditNum(int NewVal);

_automated: // Автоматизированные свойства и методы property AnsiString EditStr = //свойство типа AnsiString / / с атрибутами функции чтения/записи значении{read=GetEditStr, write=SetEditStr} ;

property int EditNum = //свойство типа int / / с атрибутами функций чтения/записи значений{read=GetEditNum, write=SetEditNum); :

void _fastcall Clear (); //метод очистки сообщения void_fastcall SetThreeStr //метод составления текстового / / сообщения из строк в параметрах si, s2, s3 типа AnsiString(AnsiString si, AnsiString s2, AnsiString s3);

void _fastcall SetThreeNum // метод составления текстового / / сообщения из чисел в параметрах п 1, п2, п3 типаint(int п1, int п2, int п3) ;

public: // Общедоступные свойства и методы

_fastcall ButtonServer О; //конструктор объекта сервера

};

//----------------------------------------------------------

#endif

Наши рекомендации