持續性
控件會實作一或多個持續性介面,以支援其狀態的持續性。 例如, IPersistStreamInit 介面支援控件狀態的數據流式持續性。 IPersistStreamInit 是 IPersistStream 的替代專案,並新增初始化方法 InitNew。 這兩個介面中的其他方法都相同。 IPersistStreamInit 不是衍生自 IPersistStream;物件僅支援這兩個介面中的一個,其是否需要能夠初始化本身的新實例。
控件可以提供的其他持續性介面包括:IPersist 儲存體、IPersistMemory、IPersistPropertyBag、IPersistMoniker。 控件實作者必須決定哪一種持續性最為重要,並實作適當的持續性介面。 控件實作器也會決定要儲存的內容。 例如,控件可以儲存其屬性的目前值,或其容器內的位置和大小。 用戶端會決定它偏好使用的介面。
從其持續性狀態載入控件之前,用戶端可以檢查OLEMISC_SETCLIENTSITEFIRST旗標,以判斷控件是否支援在載入其持續性狀態之前取得其用戶端月臺和環境屬性。 此優化可以在具現化控件時節省時間,因為控件接著可以自由地忽略其持續性值,而不是載入它們,使其只由用戶端提供的環境屬性覆寫。
控件也可以支援在 OLE 屬性集中儲存和還原其狀態、一組以指定格式的標識碼和值。 這項功能對於 Visual Basic 之類的容器很有用,其程式會以文字形式儲存。 想要支援此功能的控件會分別實作 IDataObject::GetData 和 IDataObject::SetData,以將其屬性值分別傳遞至容器和從容器傳遞。 這是容器的工作,可將此資訊轉換成文字並加以儲存。 控制項所使用的識別碼會對應至控件的屬性名稱和值。 如需此屬性集的定義,請參閱 OLE CDK。