ВУЗ:
Составители:
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. Второй способ управления является наиболее эффективным в режиме выполнения и требует от программистов контроллера автоматизации дополни- тельных усилий: