Скачиваний:
100
Добавлен:
01.05.2014
Размер:
1.56 Mб
Скачать

Создание локальных серверов и контроллеров автоматизации Понятие автоматизации.

Подавляющее большинство современных настольных приложений предназначено для выполнения пользователями тех или иных операций: создания документов, проведения расчетов, анализа данных и т. д. В процессе выполнения подобного рода работ применяются различные внутренние сервисы этих приложений, например вычисление значений по формулам, автоматическая нумерация абзацев, заголовков или страниц, проверка орфографии и многое другое. Нередко подобные приложения обладают встроенными макроязыками, позволяющими создать код, использующий эти сервисы, например в случае часто повторяющихся последовательностей операций. Иначе говоря, приложения подобного рода обладают программируемостью.

Отметим, однако, что программирование с помощью макроязыков имеет свои недостатки, так как не существует спецификаций, которым должны подчиняться макроязыки. Соответственно в общем случае у каждого программируемого приложения имеется свой макроязык, отличный от макроязыков других программируемых приложений (исключением, пожалуй, являются приложения Microsoft Office, где в качестве макроязыка используется Visual Basic for Applications - подмножество Visual Basic).

Более удобной реализацией программируемости настольных приложений было бы наличие в них возможности предоставлять свои сервисы другим приложениям с помощью универсального механизма, не зависящего от встроенных макроязыков и позволяющего, в частности, использовать обычные языки программирования. Именно для этой цели и предназначен механизм, называемый автоматизацией (Automation; ранее этот механизм назывался OLE Automation). В этом случае приложение, предоставляющее другим приложениям тот или иной сервис, использует для этой цели интерфейсы содержащихся внутри его адресного пространства СОМ-объектов, и называется сервером автоматизации. Приложение, использующее сервис, называется контроллером автоматизации и может быть написано с помощью подавляющего большинства современных средств разработки. Отметим, что серверами автоматизации являются, в частности, такие популярные приложения, как Microsoft Office (Word, Excel, Power Point), Seagate Crystal Reports, Microsoft Internet Explorer и даже сама оболочка Windows 95/98/NT.

Сервер автоматизации может выполняться в адресном пространстве клиента. В этом случае он называется внутренним (in-process) сервером и реализуется в виде библиотеки (DLL).

Помимо этого, сервер автоматизации может выполняться в собственном адресном пространстве, отличном от адресного пространства контроллера. В этом случае он называется локальным (out-of-process) сервером. Именно о серверах этого типа пойдет речь.

Если же сервер автоматизации выполняется на компьютере, отличном от компьютера, на котором выполняется контроллер, он называется удаленным. Отметим, что многие локальные серверы автоматизации могут быть запущены как удаленные.

Если клиент и сервер находятся в разных адресных пространствах (неважно, на одном компьютере или на разных), то для управления сервером клиент должен обращаться к методам объектов, находящихся в другом адресном пространстве. Для этой цели используется технология LRPC (Local Remote Procedure Calls - локальные вызовы удаленных процедур).

Как было сказано ранее, каждый СОМ-сервер (каковым является сервер автоматизации) и каждый класс СОМ-объектов обладает уникальным 128-битовым идентификатором GIUD (Global Unique Identifier). При обращении к классам СОМ-объектов он иногда называется CLSID (идентификатор класса). При создании СОМ-серверов (в том числе и серверов автоматизации) с помощью C++Builder GUID и CLSID генерируются автоматически, хотя при необходимости можно сгенерировать их с помощью вызова стандартной функции Windows API CoCreateGUID. Информация обо всех СОМ-серверах и классах СОМ-объектов хранится в системном реестре, что позволяет клиенту "не знать", в каком каталоге (или на каком компьютере локальной сети) находится СОМ-сервер, а получать информацию о нем из реестра.

В общем случае СОМ-сервер представляет собой приложение, которое создает СОМ-объект и делает его доступным для других программ. Сервер автоматизации предоставляет своим клиентам для доступа объект специального типа - dispatch object. При этом в адресном пространстве приложения-контроллера, управляющего сервером, присутствует вариантная переменная, содержащая интерфейс IDispatch, предоставляющий ему доступ к этому объекту на СОМ-сервере.

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