IStorage::OpenStorage 方法 (objidl.h)

OpenStorage 方法在指定的访问模式下打开具有指定名称的现有存储对象。

语法

HRESULT OpenStorage(
  [in]  const OLECHAR *pwcsName,
  [in]  IStorage      *pstgPriority,
  [in]  DWORD         grfMode,
  [in]  SNB           snbExclude,
  [in]  DWORD         reserved,
  [out] IStorage      **ppstg
);

参数

[in] pwcsName

指向以 null 结尾的宽字符 Unicode 字符串的指针,该字符串包含要打开的存储对象的名称。 保留 000 到 01f 字符,用作流/存储名称的第一个字符,供 OLE 使用。 这是复合文件限制,而不是结构化存储限制。 如果 pstgPriority 为非 NULL,则忽略它。

[in] pstgPriority

必须为 NULL。 非 NULL 值将返回STG_E_INVALIDPARAMETER。

[in] grfMode

指定打开存储对象时要使用的访问模式。 有关可能值的说明,请参阅 STGM 常量。 调用此方法时,所选的其他模式至少必须指定STGM_SHARE_EXCLUSIVE。

[in] snbExclude

必须为 NULL。 非 NULL 值将返回STG_E_INVALIDPARAMETER。

[in] reserved

留待将来使用;必须为零。

[out] ppstg

成功时,指向指向打开的存储对象的 IStorage 指针的位置的指针。 如果发生错误,此参数将设置为 NULL

返回值

此方法可以返回其中一个值。

返回代码 说明
S_OK 已成功打开存储对象。
E_PENDING 仅限异步存储:存储的部分或全部数据当前不可用。
STG_E_ACCESSDENIED 没有足够的权限打开存储对象。
STG_E_FILENOTFOUND 具有指定名称的存储对象不存在。
STG_E_INSUFFICIENTMEMORY 由于内存不足,未打开存储对象。
STG_E_INVALIDFLAG grfMode 参数指定的值不是有效的 STGM 常量值。
STG_E_INVALIDFUNCTION 不支持 grfMode 参数中的指定标志组合。
STG_E_INVALIDNAME pwcsName 的值无效。
STG_E_INVALIDPOINTER 为存储对象指定的指针无效。
STG_E_INVALIDPARAMETER 其中一个参数无效。
STG_E_REVERTED 事务树中存储对象上方的还原操作已失效。
STG_E_TOOMANYOPENFILES 未创建存储对象,因为打开的文件太多。
STG_S_CONVERTED 具有指定名称的现有流已替换为包含名为 CONTENTS 的单个流的新存储对象。 在直接模式下,新存储会立即写入磁盘。 在事务处理模式下,新存储将写入内存中的临时存储,并在提交后写入磁盘。

注解

如果 pstgPriority 参数为 NULL,则忽略它。 如果 pstgPriority 参数不为 NULL,则它是指向之前打开的存储对象的元素的 IStorage 指针,通常是在优先级模式下打开的元素。 应根据 grfMode 关闭并重新打开存储对象。 当 IStorage::OpenStorage 方法返回时, pstgPriority 不再有效。 使用 ppstg 参数中提供的值。

可以使用 STGM_DELETEONRELEASE 打开存储对象,在这种情况下,对象在收到最终版本时被销毁。 这对于创建临时存储对象很有用。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objidl.h
Library Uuid.lib
DLL Ole32.dll

另请参阅

IStorage - 复合文件实现

IStorage::CreateStorage