Шаг 27.
Серверы и контроллеры автоматизации (общие сведения)

    На этом шаге мы приведем общие сведения о серверах и контроллерах автоматизации.

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

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

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

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

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

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

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

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

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

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

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




Предыдущий шаг Содержание Следующий шаг