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 |