IPersistStorage::InitNew 方法 (objidl.h)
初始化新的記憶體物件。
語法
HRESULT InitNew(
[in] IStorage *pStg
);
參數
[in] pStg
要初始化之新記憶體物件的 IStorage 指標。 容器會在其記憶體物件中建立巢狀儲存物件, (請參閱 IStorage::CreateStorage) 。 然後,容器會呼叫 WriteClassStg 函式,以 (CLSID) 物件類別標識元初始化新的記憶體物件。
傳回值
這個方法可以傳回下列值。
傳回碼 | 描述 |
---|---|
|
已成功完成命令。 |
|
對象已經由先前呼叫 IPersistStorage::Load 方法或 IPersistStorage::InitNew 方法初始化。 |
|
記憶體物件因為記憶體不足而未初始化。 |
|
記憶體對象因為記憶體不足以外的某些原因而未初始化。 |
備註
容器應用程式可以在需要使用 InsertObject 命令初始化新物件時呼叫這個方法。
支援 IPersistStorage 介面的物件必須在執行時隨時存取有效的儲存物件。 這包括物件建立之後的時間,但在物件建立持續之前的時間。 物件的容器必須透過呼叫 IPersistStorage::InitNew,為物件提供記憶體的有效 IStorage 指標。 根據容器的狀態,可能必須為此目的建立臨時檔。
如果物件想要保留 IStorage 實例,它必須呼叫 AddRef 以遞增其參考計數。
呼叫 IPersistStorage::InitNew 之後,對象會處於已載入或執行中狀態。 例如,如果物件類別具有進程內伺服器,則對象會處於執行中狀態。 不過,如果物件使用默認處理程式,容器對 InitNew 的呼叫只會叫用不會執行對象的處理程式實作。 稍後,如果容器執行 對象,處理程式會呼叫 物件的 InitNew 方法。
來電者的附註
您通常會呼叫執行下列動作的 OleCreate 協助程序函式,而不是直接呼叫 IPersistStorage::InitNew:- 呼叫 CoCreateInstance 函式來建立物件類別的實例。
- 查詢 IPersistStorage 介面的新實例。
- 呼叫 InitNew 方法以初始化 物件。
實作者的注意事項
IPersistStorage::InitNew 的實作應該將物件初始化為其默認狀態,並採取下列步驟:- 預先開啟並快取物件需要儲存至此記憶體之任何數據流或記憶體的指標。
- 呼叫 AddRef 並快取傳入的記憶體指標。
- 呼叫 WriteFmtUserTypeStg 函式,將物件的原生剪貼簿格式和使用者類型字串寫入記憶體物件。
- 設定物件的已變更旗標。
如果此方法在初始化之後收到 IPersistStorage::InitNew 方法或 IPersistStorage::Load 方法的呼叫,則此方法的實作應該會傳回CO_E_ALREADYINITIALIZED錯誤碼。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | objidl.h |