Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4

Кент Рейсдорф. BORLAND C++BUILDER. Страница 437

Как вы только что убедились, Autocon способен управлять Autosrv посред­ством OLE. Давайте обратимся к коду Autocon, чтобы выяснить, как это про­исходит. Листинг 15.1 содержит исходный код формы Autocon.

Листинг 15.1. Единственная форма приложения Autocon

Следующая строка кода является ключевой:

AutoServer = CreateOleObject("BCBAutoSrv.EditServer");

AutoServer — это переменная типа Variant, определенная в файле Autol.h. Autocon устанавливает соединение с Autosrv путем создания эк­земпляра автоматизированного объекта OLE BCBAutoSrv.EditServer. Откуда берется BCBAutoSrv.EditServer? Загрузите проект Autosrv и исследуйте мо­дуль Auto2.cpp. Исходный текст приведен в листинге 15.2.

Если вы внимательно посмотрите на исходный текст Auto2.cpp, то най­дете в нем определение EditServer. Обратите внимание на ссылку на класс TAutoObject в следующей строке:

fastcall ButtonServer::ButtonServer()

: TAutoObject()

Класс ButtonServer включает в себя несколько методов. Методы GetE- ditStr(), SetEditStr() и С1еаг() вызываются Autocon для осуществления связи с Autosrv. Например, реализация метода GetEditStr() в Autosrv выглядит следующим образом:

String fastcall ButtonServer::GetEditStr()

{

return Forml->Editl->Text;

}

Для вызова GetEditStr() в Autocon используется следующий код:

Editl->Text = AutoServer.OlePropertyGet("EditStr") ;

Поскольку функция GetEditStr() определена как метод чтения для свой­ства EditStr (см. Auto2.h), запрос EditStr приводит к выполнению GetEditStr() и возврату требуемого значения. Имя свойства передается в качестве пара­метра методу 01ePropertyGet(), принадлежащему Autosrv. Когда EditStr за­прашивается в базовом автоматизированном объекте OLE, в Autosrv вызы­вается функция GetEditStr и возвращается значение свойства Autosrv Editl->Text. После этого процесс повторяется в обратном порядке. Значение, возвращенное GetEditStr, передается Autocon и присваивается свойству Text компонента Editl, принадлежащего Autocon. В результате Autocon может ссылаться на значения в Autosrv так же, как и на свои собственные. Это

Web-дизайн (с) 2010 All rights reserved