Шаг 29.
Серверы и контроллеры автоматизации. Превращение приложения в сервер автоматизации

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

    Для превращения созданного на предыдущем шаге приложения в сервер автоматизации выберем значок Automation Object на странице ActiveX репозитария объектов (рисунок 1):


Рис.1. Выбор значка Automation Object в репозитарии объектов

    В открывшемся диалоговом окне введем имя, под которым данный класс СОМ-объектов будет зарегистрирован в реестре (рисунок 2):


Рис.2. Задание имени класса

    В этом же диалоговом окне установим флажок Generate Event support code - это требуется для поддержки нотификациогшых сообщений в сервере автоматизации. В раскрывающемся списке Threading Model выберем пункт Free, означающий выбор модели свободпых потоков (free-threaded model). Подробно модели потоков будут обсуждаться позднее, сейчас же скажем только, что при использовании модели свободных потоков запросы от разных клиентов выполняются в разных потоках, и будет интересно рассмотреть проблемы, связанные с защитой глобальных переменных. В модели свободных потоков глобальными являются все переменные, объявленные за пределами класса TTest. Понятно, что локальные переменные (то есть переменные, объявленные в процедурах и функциях) в защите не нуждаются.

    Значение, выбранное в раскрывающемся списке Instancing, определяет, каким образом СОМ-сервер будет реагировать на запросы от нескольких клиентов. Предположим, что один из клиентов уже работает с данным СОМ-сервером, и в этот момент поступает запрос от другого клиента к этому же СОМ-серверу. При выборе в раскрывающемся списке пункта Multiple Instance новый экземпляр СОМ-сервера не запускается - обоих клиентов будет обслуживать созданный ранее экземпляр СОМ-сервера. При выборе пункта Single Instance для каждого клиента будет запускаться отдельный экземпляр СОМ-сервера. И наконец, при выборе пункта Internal фабрика классов СОМ-сервера не будет регистрироваться в системном реестре, следовательно, клиент не сможет обратиться к данному СОМ-серверу. Это необходимо в том случае, если данный СОМ-сервер не может работать без другого СОМ-сервера. Например, Microsoft Excel является СОМ-сервером, и одним из свойств объекта Excel.Application, зарегистрированного в системном реестре, является коллекция WorkBooks, каждый элемент которой представляет собой СОМ-сервер с незарегистрированной в реестре фабрикой классов. Если бы фабрика классов была зарегистрирована в системном реестре, то клиент мог бы обратиться к ней, минуя приложение Excel. Получилось бы, что из клиентского приложения можно было бы создать таблицу Excel, не загрузив самого приложения Excel.exe. Скорее всего, такой вариант работы разработчиками Excel не предусмотрен, и приложение завершилось бы некорректно.

    После щелчка на кнопке ОК появится заготовка модуля с рядом определенных переменных и методов, связанных с поддержкой нотификациоииых сообщений - если бы не был установлен флажок Generate Event support code, то они бы отсутствовали. Смысл этих переменных и методов будет обсуждаться позднее.

    После этого можно работать с редактором библиотеки типов, в котором нам предстоит определить свойства и методы созданного класса СОМ-объектов (рисунок 3).


Рис.3. Редактор библиотеки типов вновь созданного сервера

    Если бы не был установлен флажок Generate Event support code, в библиотеке типов отсутствовал бы интерфейс ITestEvents.

    На следующем шаге мы рассмотрим библиотеку типов.




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