Распределенные приложения: контроллеры автоматизации. Часть 2. Фертиков В.В. - 32 стр.

UptoLike

Составители: 

32
Таким образом, все эти типы также предназначены для доступа к вирту-
альной таблице соответствующих интерфейсов . В заключении данного руково-
дства обратим внимание на удобную особенность классов наследников
TAutoDriver. Если этот наследник инкапсулирует дуальный интерфейс, он
позволяет доступ к методам последнего не только через IDispatch::Invoke,
но и напрямую через виртуальную таблицу . Для реализации такого прямого
доступа в шаблоне TAutoDriver соответствующим образом перегружена опе-
рация обращения по указателю -> . Таким образом, имея например , объект
класса _ApplicationDisp, мы можем использовать любой из двух способов
доступа к дуальному интерфейсу _Application:
Exl.Visible = true; // Visible - свойство _ApplicationDisp
_WorkbookDisp Book =
Exl->Workbooks->Add(); // Workbooks - свойство _Application
Заключение: основные шаги при разработке контрол-
леров автоматизации
Контроллер автоматизации создается с целью управления сервером авто-
матизации и использует механизмы, предоставляемые технологией OLE-
автоматизации. Большинство популярных серверов реализуют объекты автома-
тизации с дуальными интерфейсами, что позволяет применять в клиентском
приложении три различных способа управления:
использовать механизм позднего (динамического) связывания через ме-
тоды IDispatch;
импортировать библиотеку типов сервера и использовать механизм
раннего связывания через виртуальные таблицы интерфейсов;
использовать вызовы диспинтерфейсов через IDispatch::Invoke при
раннем связывании, также импортировав библиотеку типов.
Первый из рассматриваемых способов наиболее прост в реализации, но
наименее эффективен в режиме выполнения. В данном случае в процессе раз -
работки контроллера автоматизации в средах программирования Delphi или
C++Builder необходимо:
1. Изучить документацию , сопровождающую сервер автоматизации в части
описания используемых объектов и интерфейсов .
2. Написать текст программы контроллера, в котором интерфейсы объявить
либо как экземпляры встроенного типа Variant (Object Pascal), либо как
объекты класса Variant (С ++). В последнем случае для доступа к свойст-
вам и методам интерфейса использовать специальные методы класса
Variant.
Второй способ управления является наиболее эффективным в режиме
выполнения и требует от программистов контроллера автоматизации дополни-
тельных усилий :
                                   32
     Таким образом, все эти типы также предназначены для доступа к вирту-
альной таблице соответствующих интерфейсов. В заключении данного руково-
дства обратим внимание на удобную особенность классов – наследников
TAutoDriver . Если этот наследник инкапсулирует дуальный интерфейс, он
позволяет доступ к методам последнего не только через IDispatch::Invoke ,
но и напрямую – через виртуальную таблицу. Для реализации такого прямого
доступа в шаблоне TAutoDriver соответствующим образом перегружена опе-
рация обращения по указателю -> . Таким образом, имея например, объект
класса _ApplicationDisp , мы можем использовать любой из двух способов
доступа к дуальному интерфейсу _Application :
Exl.Visible = true; // Visible - свойство _ApplicationDisp
_WorkbookDisp Book =
  Exl->Workbooks->Add(); // Workbooks - свойство _Application

    Заключение: основные шаги при разработке контрол-
леров автоматизации
     Контроллер автоматизации создается с целью управления сервером авто-
матизации и использует механизмы, предоставляемые технологией OLE-
автоматизации. Большинство популярных серверов реализуют объекты автома-
тизации с дуальными интерфейсами, что позволяет применять в клиентском
приложении три различных способа управления:

  • использовать механизм позднего (динамического) связывания через ме-
    тоды IDispatch ;
  • импортировать библиотеку типов сервера и использовать механизм
    раннего связывания через виртуальные таблицы интерфейсов;
  • использовать вызовы диспинтерфейсов через IDispatch::Invoke при
    раннем связывании, также импортировав библиотеку типов.

     Первый из рассматриваемых способов наиболее прост в реализации, но
наименее эффективен в режиме выполнения. В данном случае в процессе раз-
работки контроллера автоматизации в средах программирования Delphi или
C++Builder необходимо:

1. Изучить документацию, сопровождающую сервер автоматизации в части
   описания используемых объектов и интерфейсов.
2. Написать текст программы контроллера, в котором интерфейсы объявить
   либо как экземпляры встроенного типа Variant (Object Pascal), либо как
   объекты класса Variant (С++). В последнем случае для доступа к свойст-
   вам и методам интерфейса использовать специальные методы класса
   Variant.

     Второй способ управления является наиболее эффективным в режиме
выполнения и требует от программистов контроллера автоматизации дополни-
тельных усилий: