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


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

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

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

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

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

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

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