Типовой механизм создания СОМ-объектов, серверы объектов СОМ


1) Первоначально клиент вызывает функцию библиотеки СОМ — СоCreatelnstance, передавая ей CLSID нужного объекта, а также IID интерфейса, поддерживаемого объектом. Кроме того, можно указать тип сервера: «в процессе» — 1 или локальный — 4. Допускается не указывать тип сервера.

OIeCheck(CoCreateInstance(Clsid, // CLSID объекта требуемого класса
Nil, // Нужно для агрегирования (не используем)
I, // Тип сервера (1, 4, 16 удаленный)
IID, // Идентификатор требуемого интерфейса
рСоm)); // Указатель на запрашиваемый интерфейс

2) Библиотека COM no CLSID находит в системном реестре Windows (в разделе CLSID секции HKEY_CLASSES_ROOT) запись, соответствующую классу данного объекта. Эта запись содержит путь до сервера, который может создавать экземпляры требуемого объекта. Сервер запускается. Фактически, как уже говорилось ранее, эту работу выполняет диспетчер управления сервисами SCM.

3) Запущенный сервер создает экземпляр объекта и возвращает указатель (назовем его pCom) на запрашиваемый интерфейс библиотеке СОМ, которая передает этот указатель запрашивающему его клиенту.

4) Получив указатель pCom на интерфейс, реализуемый объектом, клиент
может вызывать методы этого интерфейса.

Серверы объектов СОМ

СОМ-сервер — это приложение (Ехе), библиотека (DI1) или элемент управления ActiveX (Ocx), которые предоставляют услуги клиентскому приложению или библиотеке. СОМ-сервер может состоять из одного или большего числа СОМ-объектов.

Возможны три основных типа серверов.
• внутренний сервер или сервер «в процессе» (in-process): объекты реализуются в составе динамически подключаемой библиотеки (D11) и исполняются в адресном пространстве клиента;
• локальный или выделенный сервер (out-of-process): объекты реализуются в составе самостоятельного приложения (Ехе) и исполняются в отдельном процессе на той же машине, что и клиент;
• удаленный сервер: объекты реализуются либо в составе динамической библиотеки (D11), либо в самостоятельном приложении (Ехе), и расположены на удаленном по отношению к клиенту компьютере. При этом, как уже указывалось выше, используется распределенная модель СОМ — DCOM.

Таким образом, объекты всегда работают в составе сервера. С точки зрения клиента, объекты, реализованные в составе любого вида серверов (локального, выделенного или удаленного), выглядят одинаково.

В общем случае СОМ-сервер представляет собой приложение, которое запускает СОМ-объект и делает его доступным для других приложений.
Базовым для реализации СОМ-сервера в Delphi является класс ТСоmServer. При запуске приложения-сервера автоматически создается объект этого класса, а ссылка на него присваивается глобальной переменной ComServer.

Модель создания объектов. Модель создания объектов (instancing) влияет только на выделенные (out-of-process) серверы. Возможны три варианта решения:
Single (ciSinglelnslance) — если несколько клиентов запрашивают СОМ-Объект, то система запускает новые серверы с объектами.
Multiple (ciMultilnstance) — если несколько клиентов запрашивают COМ-объект, то сервер запускает новые копии объектов.
Internal (cilnternat) — объект может быть создан только внутри сервера.
Используется такой объект в адресном пространстве приложения-клиента.

Модель управления потоками. Для серверов «in-process» устанавливается также и модель управления потоками (контекст исполнения):
• Single (tmSingle) — отсутствует поддержка потоков.
• Apartment (tmApartmenl, модель STA — Single Threaded Apartment) -раздельный доступ, означающий, что каждый СОМ-объект выполняется вконтексте собственного потока и защищен от конкурирующих потоков.
• Free (tmFree, модель МТА — Multi-Threaded Apartment) — многопоточный доступ, не требующий организации очереди обращений.
• Both (tmBoth) — поддерживает и Free и Apartment. Последняя повышает производительность СОМ-серверов, если большинство запросов на чтение.

Поиск серверов
Запрашивая создание объекта, клиент передает библиотеке СОМ идентификатор класса (CLSID) данного объекта, используя который, библиотека должна найти расположение файла сервера этого класса. Естественно, что классы всех объектов, которые будут создаваться на данном компьютере посредством библиотеки СОМ, должны быть зарегистрированы в базе системного реестра (Registry) этого компьютера, включающего:
*CLSID, выступающего ключом для поиска записи в реестре;
сведения о типе сервера: в процессе (используется ключ InprocServer32 реестра), локальный или удаленный (ключ LocalServer32 реестра);
• для серверов, расположенных на этом же компьютере, в упомянутых ключах реестра должно быть указано полное имя файла сервера, а для удаленных — сведения, где искать исполняемый файл сервера.

Создать объект, — значит, начать исполнение экземпляра класса данного объекта. Фактически основная задача библиотеки СОМ заключается в том чтобы запустить именно сервер, а не сам объект. После активизации сервер создает экземпляр объекта, реализующего запрашиваемый интерфейс, а по окончании работы сервера экземпляры объектов разрушаются.


Комментарии запрещены.




Статистика