Interfaces de persistencia

Los objetos que tienen un estado persistente de cualquier tipo deben implementar al menos una interfaz IPersist*, y preferiblemente varias interfaces, con el fin de proporcionar al contenedor la opción más flexible de cómo desea guardar el estado de un control.

Si un control tiene cualquier estado persistente, debe, como mínimo, implementar IPersistStream o IPersistStreamInit (los dos son mutuamente excluyentes y no deben implementarse juntos para la mayor parte). Este último se usa cuando un control desea saber cuándo se crea nuevo en lugar de volver a cargarse desde un estado persistente existente (IPersistStream no tiene la nueva funcionalidad creada). La existencia de cualquiera de las interfaces indica que el control puede guardar y cargar su estado persistente en una secuencia, es decir, una instancia de IStream.

Además de estas dos interfaces basadas en secuencias, las interfaces IPersist* enumeradas en la tabla siguiente se pueden proporcionar opcionalmente para admitir la persistencia en ubicaciones distintas de un IStream expandible.

Se identifica un conjunto de categorías de componentes para cubrir la compatibilidad con las interfaces de persistencia, consulte Categorías de componentes.

Interfaz Uso
IPersistMemory
El objeto puede guardar y cargar su estado en una matriz de bytes secuencial de longitud fija (en memoria).
IPersistStorage
El objeto puede guardar y cargar su estado en una instancia de IStorage . Los controles que se desean marcar como Insertables como otros objetos de documento compuestos (para la inserción en contenedores que no tienen en cuenta el control) deben admitir esta interfaz.
IPersistPropertyBag
El objeto puede guardar y cargar su estado como propiedades individuales escritas en IPropertyBag que implementa el contenedor. Esto se usa para la funcionalidad Guardar como texto en algunos contenedores.
IPersistMoniker
El objeto puede guardar y cargar su estado en una ubicación denominada por un moniker. El control llama a IMoniker::BindToStorage para recuperar la interfaz de almacenamiento que requiere, como IStorage, IStream, ILockBytes, IDataObject, etc.

Aunque la compatibilidad con IPersistPropertyBag es opcional, se recomienda encarecidamente como optimización para contenedores con características guardar como texto, como Visual Basic.

Con la excepción de IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMax e IPersistMemory::GetSizeMax, todos los métodos de cada interfaz deben implementarse completamente.

Controles