Share via


IPersistStorage::InitNew 方法 (objidl.h)

初始化新的記憶體物件。

語法

HRESULT InitNew(
  [in] IStorage *pStg
);

參數

[in] pStg

要初始化之新記憶體物件的 IStorage 指標。 容器會在其記憶體物件中建立巢狀儲存物件, (請參閱 IStorage::CreateStorage) 。 然後,容器會呼叫 WriteClassStg 函式,以 (CLSID) 物件類別標識元初始化新的記憶體物件。

傳回值

這個方法可以傳回下列值。

傳回碼 描述
S_OK
已成功完成命令。
CO_E_ALREADYINITIALIZED
對象已經由先前呼叫 IPersistStorage::Load 方法或 IPersistStorage::InitNew 方法初始化。
E_OUTOFMEMORY
記憶體物件因為記憶體不足而未初始化。
E_FAIL
記憶體對象因為記憶體不足以外的某些原因而未初始化。

備註

容器應用程式可以在需要使用 InsertObject 命令初始化新物件時呼叫這個方法。

支援 IPersistStorage 介面的物件必須在執行時隨時存取有效的儲存物件。 這包括物件建立之後的時間,但在物件建立持續之前的時間。 物件的容器必須透過呼叫 IPersistStorage::InitNew,為物件提供記憶體的有效 IStorage 指標。 根據容器的狀態,可能必須為此目的建立臨時檔。

如果物件想要保留 IStorage 實例,它必須呼叫 AddRef 以遞增其參考計數。

呼叫 IPersistStorage::InitNew 之後,對象會處於已載入或執行中狀態。 例如,如果物件類別具有進程內伺服器,則對象會處於執行中狀態。 不過,如果物件使用默認處理程式,容器對 InitNew 的呼叫只會叫用不會執行對象的處理程式實作。 稍後,如果容器執行 對象,處理程式會呼叫 物件的 InitNew 方法。

來電者的附註

您通常會呼叫執行下列動作的 OleCreate 協助程序函式,而不是直接呼叫 IPersistStorage::InitNew
  1. 呼叫 CoCreateInstance 函式來建立物件類別的實例。
  2. 查詢 IPersistStorage 介面的新實例。
  3. 呼叫 InitNew 方法以初始化 物件。
容器應用程式應該快取 物件的 IPersistStorage 指標,以供物件稍後的作業使用。

實作者的注意事項

IPersistStorage::InitNew 的實作應該將物件初始化為其默認狀態,並採取下列步驟:
  1. 預先開啟並快取物件需要儲存至此記憶體之任何數據流或記憶體的指標。
  2. 呼叫 AddRef 並快取傳入的記憶體指標。
  3. 呼叫 WriteFmtUserTypeStg 函式,將物件的原生剪貼簿格式和使用者類型字串寫入記憶體物件。
  4. 設定物件的已變更旗標。
前兩個步驟特別重要,可確保物件可以在記憶體不足的情況下自行儲存。 預先開啟並按住數據流和記憶體介面的指標,可確保儲存作業到此儲存體不會因為記憶體不足而失敗。

如果此方法在初始化之後收到 IPersistStorage::InitNew 方法或 IPersistStorage::Load 方法的呼叫,則此方法的實作應該會傳回CO_E_ALREADYINITIALIZED錯誤碼。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 objidl.h

另請參閱

IPersistStorage