Поделиться через


Вспомогательные функции создания экземпляров

В предыдущих выпусках COM основной механизм, используемый для создания экземпляра объекта, был функцией CoCreateInstance. Эта функция инкапсулирует процесс создания объекта класса, используя его для создания нового экземпляра и освобождения объекта класса. Другая функция такого рода является более конкретной функцией OleCreate, вспомогательной функцией составного документа OLE, которая создает объект класса и извлекает указатель на запрошенный объект.

Чтобы сгладить процесс создания экземпляров в распределенных системах, COM представил четыре важных механизма создания новых экземпляров:

Моникер класса позволяет определить класс объекта и обычно используется с другим моникером, например моникером файла, чтобы указать расположение объекта. Это позволяет привязаться к объекту и указать сервер, который должен быть запущен для этого объекта. Моникеры класса также могут быть составлены справа от моникеров, поддерживающих привязку к интерфейсу IClassActivator . Дополнительные сведения см. в разделе "Моникеры классов".

CoCreateInstanceEx расширяет CoCreateInstance , чтобы создать один неинициализированный объект, связанный с заданным CLSID на указанном удаленном компьютере. Кроме того, вместо того, чтобы запрашивать один интерфейс и получать один указатель на этот интерфейс, CoCreateInstanceEx позволяет запрашивать несколько интерфейсов и (если доступно) получать указатели на них в одном круговом пути, что позволяет уменьшить количество круговых путей между компьютерами. Это может сделать удаленное взаимодействие объектов гораздо эффективнее. Для этого функция использует массив MULTI_QI структур.

Создание объекта через CoCreateInstanceEx по-прежнему требует инициализации объекта с помощью вызова одного из интерфейсов инициализации (например, IPersist служба хранилища::Load). Вспомогательные функции CoGetInstanceFromFile и CoGetInstanceFromI служба хранилища инкапсулируют возможности создания экземпляра CoCreateInstanceEx и инициализации, бывшего из файла и последнего из хранилища.

Создание объекта с помощью объекта класса