CoCreateInstanceFromApp 函数 (combaseapi.h)

从应用容器内在特定计算机上创建特定类的实例。

语法

HRESULT CoCreateInstanceFromApp(
  [in]           REFCLSID Clsid,
  [in, optional] IUnknown *punkOuter,
  [in]           DWORD    dwClsCtx,
  [in, optional] PVOID    reserved,
  [in]           DWORD    dwCount,
  [in, out]      MULTI_QI *pResults
);

参数

[in] Clsid

要创建的对象的 CLSID。

[in, optional] punkOuter

如果此参数为非 NULL,则表示正在作为聚合的一部分创建实例,而 punkOuter 将用作新实例的控制 IUnknown。 聚合目前不支持跨进程或跨计算机。 在进程外实例化对象时,如果 punkOuterNULL,将返回CLASS_E_NOAGGREGATION。

[in] dwClsCtx

CLSCTX 枚举中的值。

[in, optional] reserved

保留供将来使用。

[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 数组中请求的任何接口。

注解

CoCreateInstanceFromApp 函数与 CoCreateInstanceEx 函数相同,但存在以下差异。

  • CoCreateInstanceFromApp 函数仅从应用程序上下文和 HKLM\SOFTWARE\Classes\CLSID 注册表配置单元读取类注册。
  • 仅提供应用容器中支持的内置类。 尝试激活不受支持的类(包括第三方代码安装的所有类以及许多 Windows 类)会导致错误代码 REGDB_E_CLASSNOTREG
  • CoCreateInstanceFromApp 函数可用于 Windows 应用商店应用。 桌面应用程序可以调用此函数,但它们具有与 Windows 应用商店应用相同的限制。

要求

要求
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 combaseapi.h
Library Combase.lib
DLL Combase.dll

另请参阅

CoCreateInstanceEx

Fusion (非托管 API 参考)