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。 聚合目前不支持跨进程或跨计算机。 在进程外实例化对象时,如果 punkOuterNULL,将返回CLASS_E_NOAGGREGATION。

[in] dwClsCtx

CLSCTX 枚举中的值。

[in] pServerInfo

有关要实例化对象的计算机的信息。 请参阅 COSERVERINFO。 此参数可以为 NULL,在这种情况下,将根据 dwClsCtx 参数的解释,在本地计算机或注册表中指定的计算机上实例化该类的 RemoteServerName 值。

[in] dwCount

pResults 中的结构数。 此值必须大于 0。

[in, out] pResults

MULTI_QI结构的数组。 每个结构都有三个成员:请求的接口 (pIID) 的标识符、 (pItf) 返回接口指针的位置,以及对 QueryInterface (小时) 调用的返回值。

返回值

此函数可以返回E_INVALIDARG的标准返回值,以及以下值。

返回代码 说明
S_OK
表示成功。
REGDB_E_CLASSNOTREG
指定的类未在注册数据库中注册。 还可以指示在 CLSCTX 枚举中请求的服务器类型未注册,或者注册表中服务器类型的值已损坏。
CLASS_E_NOAGGREGATION
此类不能作为聚合的一部分创建。
CO_S_NOTALLINTERFACES
至少一个,但不是所有 在 pResults 数组中请求的接口已成功检索。 pResults 中每个MULTI_QI结构的 hr 成员使用S_OK或E_NOINTERFACE指示是否返回了特定接口。
E_NOINTERFACE
未成功检索 pResults 数组中请求的任何接口。

注解

CoCreateInstanceEx 在指定的远程计算机上创建与给定 CLSID 关联的单个未初始化对象。 这是 函数 CoCreateInstance 的扩展,该函数仅在本地计算机上创建对象。 此外, CoCreateInstanceEx 无需请求单个接口并获取指向该接口的单个指针,而是可以指定一个结构数组,每个结构都指向输入时 (IID) 的接口标识符,在返回时,包含 ((如果可用)) 指向所请求接口的指针以及该接口的 QueryInterface 调用的返回值。 这可以减少计算机之间的往返次数。

此函数封装三个调用:第一,到 CoGetClassObject 以连接到与指定的 CLSID 关联的类对象,指定类的位置;其次,使用 IClassFactory::CreateInstance 创建未初始化的实例,最后,使用 IClassFactory::Release 释放类对象。

仍必须通过调用其中一个初始化接口 ((例如 IPersistStorage::Load) )初始化这样创建的对象。 CoGetInstanceFromFileCoGetInstanceFromIStorage 这两个函数封装了来自明显源的实例创建和初始化。

作为 pServerInfo 参数传递的 COSERVERINFO 结构包含 COM 在创建指定对象的新实例时将使用的安全设置。 请注意,此参数不会影响对实例化对象进行方法调用时使用的安全设置。 这些安全设置可通过 CoSetProxyBlanket 函数按接口进行配置。 另请参阅 IClientSecurity::SetBlanket

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 combaseapi.h (包括 Objbase.h)
Library Ole32.lib
DLL Ole32.dll

另请参阅

CoGetInstanceFromFile

CoGetInstanceFromIStorage