Функция 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, а также следующие значения.
Код возврата | Описание |
---|---|
|
Указывает на успешное завершение. |
|
Указанный класс не зарегистрирован в базе данных регистрации. Также может указывать на то, что тип сервера, запрошенный в перечислении CLSCTX , не зарегистрирован или значения для типов серверов в реестре повреждены. |
|
Этот класс не может быть создан как часть статистического выражения. |
|
По крайней мере один, но не все интерфейсы, запрошенные в массиве pResults , были успешно получены. Элемент hr каждой из структур MULTI_QI в pResults указывает S_OK или 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 |