持續性介面
具有任何類型永續性狀態的對象必須實作至少一個 IPersist* 介面,最好是多個介面,以提供容器最彈性的選擇,以瞭解如何儲存控件的狀態。
如果控件有任何持續性狀態,它至少必須實作 IPersistStream 或 IPersistStreamInit(這兩者互斥,而且不應該在大部分的情況下一起實作)。 當控件想要知道何時建立新的 控件,而不是從現有的永續性狀態重載時,會使用後者 (IPersistStream 沒有建立的新功能)。 任一介面的存在表示控件可以儲存並載入其永續性狀態至數據流,也就是 IStream 的實例。
除了這兩個數據流型介面之外,您也可以選擇性地提供下表所列的 IPersist* 介面,以支援可擴充 IStream 以外的位置持續性。
識別出一元件類別來涵蓋持續性介面的支援,請參閱 元件類別。
介面 | 使用方式 |
---|---|
IPersistMemory |
物件可以將它的狀態儲存並載入固定長度的循序位元組陣列(記憶體中)。 |
IPersist 儲存體 |
物件可以儲存並將其狀態載入 I 儲存體 實例。 想要將 Insertable 標示為其他複合檔案物件的控件(用於插入至非控件感知容器)必須支援這個介面。 |
IPersistPropertyBag |
物件可以儲存並載入其狀態,做為寫入容器實作之 IPropertyBag 的個別屬性。 這用於某些容器中的另存新檔文字功能。 |
IPersistMoniker |
物件可以儲存並載入其狀態至Moniker所命名的位置。 控件會呼叫 IMoniker::BindTo 儲存體 擷取所需的記憶體介面,例如 I 儲存體、IStream、ILockBytes、IDataObject 等。 |
雖然支援 IPersistPropertyBag 是選擇性的,但強烈建議您針對具有 [另存新檔] 文字功能的容器進行優化,例如 Visual Basic。
除了 IPersistStream::GetSizeMax、IPersistStreamInit::GetSizeMax 和 IPersistMemory::GetSizeMax 之外,每個介面的所有方法都必須完全實作。