IPersistStorage::SaveCompleted 方法 (objidl.h)

通知对象它可以写入其存储对象。 它通过通知对象,它可以从 NoScribble 模式还原 (它不得写入到其存储对象) ,到正常模式 (,可在其中) 。 对象在收到 IPersistStorage::Save 调用时进入 NoScribble 模式。

语法

HRESULT SaveCompleted(
  [in] IStorage *pStgNew
);

参数

[in] pStgNew

指向新存储对象的 IStorage 指针(如果与保存前的存储对象不同)。 如果当前存储对象在保存操作期间未更改,则此指针可以为 NULL 。 如果对象处于 HandsOff 模式,则此参数必须为非 NULL

返回值

此方法可以返回以下值。

返回代码 说明
S_OK
该方法已成功完成。
E_OUTOFMEMORY
由于内存不足,对象仍处于 HandsOff 模式或 NoScribble 模式。 通常,当对象无法在 pStgNew 中打开必要的流和存储对象时,会发生此错误。
E_INVALIDARG
pStgNew 参数无效。 通常,如果对象处于 HandsOff 模式时 pStgNewNULL ,则会发生此错误。
E_UNEXPECTED
对象处于 Normal 模式,以前没有调用 IPersistStorage::SaveIPersistStorage::HandsOffStorage

注解

此方法通知对象,它可以还原正常模式,并可以再次写入其存储对象。 对象退出 NoScribble 模式或 HandsOff 模式。

如果对象正在从 HandsOff 模式还原,则 pStgNew 参数必须为非 NULL。 在 HandsOffFromNormal 模式下,此参数是替换 IPersistStorage::HandsOffStorage 方法吊销的新存储对象。 存储对象中的数据是已撤销的存储对象中的数据的副本。 在 HandsOffAfterSave 模式下,数据与最近保存的数据相同。 它与吊销的存储对象中的数据不同。

如果对象从 NoScribble 模式还原, 则 pStgNew 参数可以为 NULL 或非 NULL。 如果 为 NULL,则对象再次有权访问其存储对象。 如果它不是 NULL,则组件对象应模拟接收对其 HandsOffStorage 方法的调用。 如果组件对象无法模拟此调用,则必须准备好其容器以实际调用 HandsOffStorage 方法。

此方法必须以递归方式调用已加载或正在运行的任何嵌套对象。

如果此方法返回错误代码,则对象不会返回到 Normal 模式。 因此,容器对象可以尝试不同的保存策略。

要求

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

另请参阅

IPersistStorage