Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





ActiveX-сервер (ActiveX EXE)

В самом начале этой главы уже приводился пример программы helo_svr.exe, которая может выполнять роль ActiveX-сервера и содержит в себе методы, доступные клиентам через DCOM дистанционно. Это типичный пример программы типа out-of-process. Схематично, в отношении некоторых условных профамм (клиент и сервер) это может выглядеть так, как показано на рис. 1.17.

Рис. 1.17. Схема построения распределенных приложений по технологии ActiveX

Как можно использовать ActiveX-серверы или ActiveX-контейнеры?

Наиболее типичный случай — это публиковать и широко рекламировать свою объектную модель, чтобы к описанным в ней объектам, их методам и свойствам могли свободно получать доступ другие профаммы.
Почти все известные профаммы и СУБД, которые вы уже инсталлировали на своем компьютере, являются ActiveX-контейнерами или ActiveX-серверами. Запустите из Microsoft Studio утилиту OLE/COM Object Viewer и вы увидите много интересного.

С помощью различных профамм-анализаторов или фирменных описаний можно узнать, какие конкретно методы доступны для вызова и использования. Если вы знаете их, то свободно сможете осуществлять различные манипуляции из ваших профамм, например, над таблицами Excel и документами Word, потому что и Word, и Excel являются ActiveX-серверами, а их объектные модели широко известны почти любому разработчику.

Более того, мне однажды понадобилось осуществить доступ из базы данных Lotus Notes к базе данных Oracle, запущенной совсем на другом компьютере. Поскольку обе базы данных управлялись Windows, использование технологии ActiveX оказалось как нельзя кстати.

 

Пример взаимодействия Oracle и Notes с использованием технологий ActiveX

Чтотакое Oracle COM Automation Feature

Oracle COM Automation Feature позволяет PL/SQL-разработчикам манипулировать СОМ-объектами через интерфейс OLE Automation Idispatch (рис. 1.18).

Рис. 1.18. Использование COM/DCOM в Oracle

В PL/SQL-пакетах можно определять наборы интерфейсов (APIs) для инициации СОМ-объектов, получать или устанавливать их свойства и вызывать их методы. PL/SQL-разработчики могут вызывать эти APIs из PL/SQL-подпрограмм, сохраненных процедур или триггеров для манипуляции с СОМ-объектами.

Доступ к объектам, где бы они не находились, осуществляется совершенно прозрачно: либо непосредственно в локальной СУБД, либо в удаленной посредством протокола DCOM (Distributed Component Object Model).

Таким образом, у разработчиков приложений для баз данных Oracle появляется возможность улучшать их функциональность путем использования средств из арсенала Microsoft Word, Microsoft Excel и Microsoft PowerPoint, генерировать отчеты, используя Crystal Reports, получать и посылать почту в форматах почтовых серверов Lotus Notes, Microsoft Exchange или Oracle InterOffice.

 

Эти APIs выполнены в виде внешних процедур или динамически подключаемых библиотек (DLL). Oracle8 версии 8.0.3 стал первой реализацией для бесшовного включения внешних процедур.

 

 

Реализация интерфейса подключения внешних процедур OLE Automation External Procedure APIs

СУБД Oracle вызывает любую внешнюю OLE Automation APIs следующим способом:

1. PL/SQL-интерпретатор определяет местонахождение специальной библиотеки (Oracle COM Automation feature) (COM81.DLL).

2. PL/SQL-интерпретатор посылает сообщение, используя Net8 к Oracle-listener для запуска EXTPROC.EXE.

3. EXTPROC.EXE загружает DLL и выполняет внешнюю процедуру. Каждая внешняя API-процедура OLE Automation вызывает Win32 APIs, который инициирует СОМ-объект, устанавливает или получает его свойства и вызывает его методы.

4. EXTPROC.EXE действует как часть Oracle Server (рис. 1.19).

 

Рис. 1.19. Подключение внешних процедур

 

     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru