Persistencia
Un control implementa una o varias interfaces de persistencia para admitir la persistencia de su estado. Por ejemplo, la interfaz IPersistStreamInit admite la persistencia basada en secuencias del estado del control. IPersistStreamInit es un reemplazo de IPersistStream y agrega un método de inicialización, InitNew. Los otros métodos son los mismos en ambas interfaces. IPersistStreamInit no se deriva de IPersistStream; un objeto solo admite una de las dos interfaces en función de si requiere la capacidad de inicializar nuevas instancias de sí mismas.
Otras interfaces de persistencia que un control puede ofrecer incluyen: IPersistStorage, IPersistMemory, IPersistPropertyBag, IPersistMoniker. El implementador de control debe decidir qué tipos de persistencia son más importantes e implementar las interfaces de persistencia adecuadas. El implementador de control también decide qué guardar. Por ejemplo, un control puede guardar los valores actuales de sus propiedades o su ubicación y tamaño dentro de su contenedor. El cliente decide qué interfaz prefiere usar.
Antes de cargar un control desde su estado persistente, un cliente puede comprobar la marca de OLEMISC_SETCLIENTSITEFIRST para determinar si el control admite la obtención de sus propiedades de sitio cliente y ambiente antes de cargar su estado persistente. Esta optimización puede ahorrar tiempo al crear una instancia de un control, ya que el control es libre de omitir sus valores persistentes en lugar de cargarlos solo para que las propiedades ambientales proporcionadas por el cliente las invaliden.
Un control también puede admitir guardar y restaurar su estado en un conjunto de propiedades OLE, un conjunto de identificadores y valores en un formato especificado. Esta característica puede ser útil con contenedores como Visual Basic, que guarda sus programas en un formato textual. Un control que quiere admitir esta característica implementa IDataObject::GetData e IDataObject::SetData para pasar sus valores de propiedad hacia y desde el contenedor, respectivamente. Es el trabajo del contenedor convertir esta información en texto y guardarla. Los identificadores usados por el control corresponden a los nombres de propiedad y los valores del control. Vea OLE CDK para obtener la definición de este conjunto de propiedades.