Функция CoCreateInstanceEx (combaseapi.h)

Создает экземпляр определенного класса на определенном компьютере.

Синтаксис

HRESULT CoCreateInstanceEx(
  [in]      REFCLSID     Clsid,
  [in]      IUnknown     *punkOuter,
  [in]      DWORD        dwClsCtx,
  [in]      COSERVERINFO *pServerInfo,
  [in]      DWORD        dwCount,
  [in, out] MULTI_QI     *pResults
);

Параметры

[in] Clsid

ИДЕНТИФИКАТОР CLSID создаваемого объекта.

[in] punkOuter

Если этот параметр не равен NULL, указывает, что экземпляр создается как часть статистической обработки, а punkOuter будет использоваться в качестве управляемого IUnknown нового экземпляра. Агрегирование в настоящее время не поддерживается между процессами или компьютерами. При создании экземпляра объекта вне процесса возвращается CLASS_E_NOAGGREGATION, если punkOuter имеет значение, отличное от NULL.

[in] dwClsCtx

Значение из перечисления CLSCTX .

[in] pServerInfo

Сведения о компьютере, на котором создается экземпляр объекта. См. раздел COSERVERINFO. Этот параметр может иметь значение NULL. В этом случае экземпляр объекта создается на локальном компьютере или на компьютере, указанном в реестре под значением RemoteServerName класса, в соответствии с интерпретацией параметра dwClsCtx .

[in] dwCount

Количество структур в pResults. Это значение должно быть больше 0.

[in, out] pResults

Массив MULTI_QI структур. Каждая структура имеет три члена: идентификатор запрошенного интерфейса (pIID), расположение для возврата указателя интерфейса (pItf) и возвращаемое значение вызова QueryInterface (hr).

Возвращаемое значение

Эта функция может возвращать стандартное возвращаемое значение E_INVALIDARG, а также следующие значения.

Код возврата Описание
S_OK
Указывает на успешное завершение.
REGDB_E_CLASSNOTREG
Указанный класс не зарегистрирован в базе данных регистрации. Также может указывать на то, что тип сервера, запрошенный в перечислении CLSCTX , не зарегистрирован или значения для типов серверов в реестре повреждены.
CLASS_E_NOAGGREGATION
Этот класс не может быть создан как часть статистического выражения.
CO_S_NOTALLINTERFACES
По крайней мере один, но не все интерфейсы, запрошенные в массиве pResults , были успешно получены. Элемент hr каждой из структур MULTI_QI в pResults указывает S_OK или E_NOINTERFACE, был ли возвращен определенный интерфейс.
E_NOINTERFACE
Ни один из интерфейсов, запрошенных в массиве pResults , не был успешно извлечен.

Комментарии

CoCreateInstanceEx создает один неинициализированный объект, связанный с заданным ИДЕНТИФИКАТОРом CLSID на указанном удаленном компьютере. Это расширение функции CoCreateInstance, которая создает объект только на локальном компьютере. Кроме того, вместо того, чтобы запрашивать один интерфейс и получать один указатель на этот интерфейс, CoCreateInstanceEx позволяет указать массив структур, каждый из которых указывает на идентификатор интерфейса (IID) при входе и при возврате, содержащий (если доступно) указатель на запрошенный интерфейс и возвращаемое значение вызова QueryInterface для этого интерфейса. Это позволяет сократить круговые пути между компьютерами.

Эта функция инкапсулирует три вызова: во-первых, в CoGetClassObject для подключения к объекту класса, связанному с указанным ИДЕНТИФИКАТОРом CLSID, с указанием расположения класса ; во-вторых, для IClassFactory::CreateInstance , чтобы создать неинициализированный экземпляр, и, наконец, для IClassFactory::Release, чтобы освободить объект класса.

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

Структура COSERVERINFO , передаваемая в качестве параметра pServerInfo , содержит параметры безопасности, которые COM будет использовать при создании нового экземпляра указанного объекта. Обратите внимание, что этот параметр не влияет на параметры безопасности, используемые при выполнении вызовов методов для экземпляра объекта. Эти параметры безопасности настраиваются для каждого интерфейса с помощью функции CoSetProxyBlanket . См. также IClientSecurity::SetBlanket.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header combaseapi.h (включая Objbase.h)
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

CoGetInstanceFromFile

CoGetInstanceFromiStorage