CoGetInstanceFromIStorage 函数 (objbase.h)

创建一个新的 对象,并通过对 IPersistFile::Load 的内部调用从存储对象初始化它。

语法

HRESULT CoGetInstanceFromIStorage(
  [in, optional] COSERVERINFO *pServerInfo,
  [in, optional] CLSID        *pClsid,
  [in, optional] IUnknown     *punkOuter,
  [in]           DWORD        dwClsCtx,
  [in]           IStorage     *pstg,
  [in]           DWORD        dwCount,
  [in, out]      MULTI_QI     *pResults
);

参数

[in, optional] pServerInfo

指向 COSERVERINFO 结构的指针,该结构指定要实例化对象的计算机以及要使用的身份验证设置。 此参数可以是 NULL,在这种情况下,对象在当前计算机上实例化,在类的 RemoteServerName 注册表值下指定的计算机上实例化;如果为类指定了 ActivateAtStorage 值或没有本地注册表信息,则会在 pstg 存储对象所在的计算机上实例化该对象。

[in, optional] pClsid

指向要创建的对象的类标识符的指针。 此参数可以为 NULL,在这种情况下,会调用 IStorage::Stat 来查找对象的类。

[in, optional] punkOuter

如果为非 NULL,则指示正在作为聚合的一部分创建实例,并将 punkOuter 用作指向新实例的控制 IUnknown 的指针。 不支持跨进程或跨计算机聚合。 在进程外实例化对象时,如果 punkOuter 为非 NULL,则将返回CLASS_E_NOAGGREGATION。

[in] dwClsCtx

CLSCTX 枚举中的值。

[in] pstg

指向用于使用 IPersistFile::Load 初始化对象的存储对象的指针。 此参数不能为 NULL

[in] dwCount

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

[in, out] pResults

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

返回值

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

返回代码 说明
S_OK
函数已成功检索所有接口。
CO_S_NOTALLINTERFACES
已成功检索 pResults 数组中请求的至少一个接口,但并非所有接口。 每个MULTI_QI结构的 hr 成员使用 S_OK 或 E_NOINTERFACE指示是否返回了特定接口。
E_NOINTERFACE
未成功检索 pResults 数组中请求的接口。

注解

CoGetInstanceFromIStorage 创建一个新的 对象,并使用 IPersistFile::Load 从存储对象初始化它。 此函数的结果类似于通过调用 CoCreateInstanceEx 创建实例,然后初始化对 IPersistFile::Load 的调用,但有以下重要区别:

  • 在远程计算机上实例化对象时,此函数所需的网络往返次数更少。
  • dwClsCtx 设置为 CLSCTX_REMOTE_SERVER pServerInfoNULL 的情况下,如果类是使用 ActivateAtStorage 值注册的,或者没有关联的注册表信息,则此函数将实例化 pstg 所在的计算机上的对象,从而提供尽可能少的网络流量。

要求

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

另请参阅

CLSCTX

CoCreateInstanceEx

CoGetInstanceFromFile