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

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

   
Для превращения созданного на предыдущем шаге приложения в сервер автоматизации выберем значок
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.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий