持久性接口

具有任何类型的持久状态的对象必须至少实现一个 IPersist* 接口,最好是多个接口,以便为容器提供最灵活的选择,以便保存控件的状态。

如果控件具有任何持久性状态,则必须至少实现 IPersistStreamIPersistStreamInit(两者是相互排斥的,不应在大多数情况下一起实现)。 当控件希望知道何时创建新控件而不是从现有持久性状态重新加载(IPersistStream 没有创建新功能)时,将使用后者。 任一接口的存在表示控件可以保存其持久状态并将其加载到流中,即 IStream实例。

除了这两个基于流的接口外,还可以选择提供下表中列出的 IPersist* 接口,以支持对除可扩展 IStream以外的位置的持久性。

标识了一组组件类别,用于涵盖对持久性接口的支持,请参阅 组件类别

接口 用法
IPersistMemory
对象可以保存其状态并将其加载到固定长度的顺序字节数组(内存中)。
IPersistStorage
该对象可以保存其状态并将其加载到 IStorage 实例中。 希望标记为可插入的其他复合文档对象的控件(要插入到非控件感知容器中)必须支持此接口。
IPersistPropertyBag
该对象可以将状态保存并加载为容器实现的 IPropertyBag 的单个属性。 这用于某些容器中的“另存为文本”功能。
IPersistMoniker
该对象可以将状态保存并加载到名字对象命名的位置。 该控件调用 IMoniker::BindToStorage 来检索所需的存储接口,例如 IStorageIStreamILockBytesIDataObject等。

尽管对 IPersistPropertyBag 的支持是可选的,但强烈建议使用“另存为文本”功能(如 Visual Basic)的容器进行优化。

除了 IPersistStream::GetSizeMaxIPersistStreamInit::GetSizeMaxIPersistMemory::GetSizeMax之外,每个接口的所有方法都必须完全实现。

控件