IPersistStorage::Save 方法 (objidl.h)

将对象及其包含的任何嵌套对象保存到指定的存储对象中。 对象进入 NoScribble 模式。

语法

HRESULT Save(
  [in] IStorage *pStgSave,
  [in] BOOL     fSameAsLoad
);

参数

[in] pStgSave

指向要在其中保存对象的存储的 IStorage 指针。

[in] fSameAsLoad

指示指定的存储是当前存储,该存储是通过以下调用之一传递到对象的: IPersistStorage::InitNewIPersistStorage::LoadIPersistStorage::SaveCompleted

执行“另存为”或“将副本保存到”操作或执行完全保存时,此参数设置为 FALSE。 在后一种情况下,此方法将保存到临时文件,删除原始文件,并重命名临时文件。

此参数设置为 TRUE,以在内存不足的情况下执行完全保存,或执行仅保存脏组件的快速增量保存。

返回值

此方法可以返回以下值。

返回代码 说明
S_OK
该方法已成功完成。
STG_E_MEDIUMFULL
由于磁盘上缺少空间,对象未保存。
E_FAIL
由于磁盘空间不足以外的错误,无法保存对象。

注解

此方法将对象及其包含的任何嵌套对象保存到指定的存储中。 它还会将对象置于 NoScribble 模式。 因此,在后续调用 IPersistStorage::SaveCompleted 方法将对象返回到 Normal 模式之前,对象无法写入其存储。

如果存储对象与加载或创建它的存储对象相同,则保存操作可能能够将增量更改写入存储对象。 否则,必须完成完整保存。

此方法以递归方式调用 IPersistStorage::Save 方法、 OleSave 函数或 IStorage::CopyTo 方法以保存其嵌套对象。

此方法不调用 IStorage::Commit 方法。 也不会将 CLSID 写入存储对象。 这两个任务都是调用方的责任。

给调用方的说明

通常调用执行以下步骤的 OleSave 帮助程序函数,而不是直接调用 IPersistStorage::Save
  1. 调用 WriteClassStg 函数,将对象的类标识符写入存储。
  2. 调用 IPersistStorage::Save 方法。
  3. 如果需要,请在存储对象上调用 IStorage::Commit 方法。
然后,容器应用程序执行完成保存所需的任何其他操作,并为每个对象调用 SaveCompleted 方法。

如果嵌入对象将 IPersistStorage::Save 方法传递给其嵌套对象,则必须先接收对其 IPersistStorage::SaveCompleted 方法的调用,然后才能为其嵌套对象调用此方法。

要求

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

另请参阅

IPersistStorage

OleSave