IPersistStorage::Save 方法 (objidl.h)

將物件及其包含的任何巢狀物件儲存到指定的儲存物件中。 對象進入 NoScribble 模式。

語法

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

參數

[in] pStgSave

要儲存物件的記憶體的 IStorage 指標。

[in] fSameAsLoad

指出指定的記憶體是否為目前記憶體,這是由下列其中一個呼叫傳遞至物件:IPersistStorage::InitNewIPersistStorage::Load 或 IPersistStorage::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 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 objidl.h

另請參閱

IPersistStorage

OleSave