Для обеспечения выполнения общих функций и базовых интерфейсов в операционной систем устанавливается специальная библиотека СОМ (конкретная реализация может быть различной). Доступ к функциям библиотеки осуществляется стандартным способом, а не через интерфейс. Согласно спецификации, имена всех библиотечных функций начинаются с приставки «Со».
При установке использующего СОМ приложения в системный реестр записывается информация обо всех используемых им объектах СОМ:
· Идентификатор класса (Class Identifier – CLSID), который однозначно определяет класс объекта;
· Тип сервера – внутренний, локальный, удаленный;
· Для локальных и внутренних серверов сохраняется полное имя динамической библиотеки или исполняемого файла;
· Для удаленных серверов записывается полный сетевой адрес.
При попытке клиента использовать некоторый объект СОМ, который до этого момента не использовался и, следовательно, клиент не мог получить указатели на объект и интерфейс, он обращается к библиотеке СОМ и вызывает метод CoCreateInstance, передавая ей в качестве параметра CLSID нужного класса, IDD интерфейса и требуемый тип сервера.
|
|
Библиотека при помощи диспетчера управления службами обращается в системному реестру, по идентификатору класса находит информацию и сервере и запускает его. Сервер создает экземпляр класса – объект, и возвращает библиотеке указатель на запрошенный интерфейс.
Библиотека СОМ передает указатель клиенту, который впоследствии может обращаться непосредственно к объекту. Схема создания первого экземпляра объекта с помощью библиотеки СОМ и системного реестра приведена на (СЛАЙДЕ 4).
Для неявной инициализации созданного объекта (установки значений свойств) может использоваться специальный объект – моникер. Или же клиент может инициализировать объект самостоятельно, применив специальные интерфейсы: IPersistFile, IPersistStjrage, IPersistStream.