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的标准返回值,以及以下值。
返回代码 | 说明 |
---|---|
|
函数已成功检索所有接口。 |
|
已成功检索 pResults 数组中请求的至少一个接口,但并非所有接口。 每个MULTI_QI结构的 hr 成员使用 S_OK 或 E_NOINTERFACE指示是否返回了特定接口。 |
|
未成功检索 pResults 数组中请求的接口。 |
注解
CoGetInstanceFromIStorage 创建一个新的 对象,并使用 IPersistFile::Load 从存储对象初始化它。 此函数的结果类似于通过调用 CoCreateInstanceEx 创建实例,然后初始化对 IPersistFile::Load 的调用,但有以下重要区别:
- 在远程计算机上实例化对象时,此函数所需的网络往返次数更少。
- 在 dwClsCtx 设置为 CLSCTX_REMOTE_SERVER pServerInfo 为 NULL 的情况下,如果类是使用 ActivateAtStorage 值注册的,或者没有关联的注册表信息,则此函数将实例化 pstg 所在的计算机上的对象,从而提供尽可能少的网络流量。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | objbase.h |
Library | Ole32.lib |
DLL | Ole32.dll |