Кент Рейсдорф. 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 так же, как и на свои собственные. Это