Interfaces de persistência

Objetos que têm um estado persistente de qualquer tipo devem implementar pelo menos uma interface IPersist* e, preferencialmente, várias interfaces, a fim de fornecer ao contêiner a opção mais flexível de como ele deseja salvar o estado de um controle.

Se um controle tiver qualquer estado persistente, ele deverá, no mínimo, implementar IPersistStream ou IPersistStreamInit (os dois são mutuamente exclusivos e não devem ser implementados juntos na maioria das vezes). Este último é usado quando um controle deseja saber quando ele é criado novo em vez de recarregar de um estado persistente existente (IPersistStream não tem a nova funcionalidade criada). A existência de qualquer interface indica que o controle pode salvar e carregar seu estado persistente em um fluxo, ou seja, uma instância do IStream.

Além dessas duas interfaces baseadas em fluxo, as interfaces IPersist* listadas na tabela a seguir podem ser fornecidas opcionalmente para dar suporte à persistência em locais diferentes de um IStream expansível.

Um conjunto de categorias de componentes é identificado para cobrir o suporte para interfaces de persistência ver Categorias de Componente.

Interface Uso
IPersistMemory
O objeto pode salvar e carregar seu estado em uma matriz de bytes sequencial de comprimento fixo (na memória).
Ipersiststorage
O objeto pode salvar e carregar seu estado em uma instância IStorage . Os controles que desejam ser marcados como inseriveis como outros objetos de documento composto (para inserção em contêineres sem controle) devem dar suporte a essa interface.
Ipersistpropertybag
O objeto pode salvar e carregar seu estado como propriedades individuais gravadas no IPropertyBag que o contêiner implementa. Isso é usado para a funcionalidade Salvar como Texto em alguns contêineres.
IPersistMoniker
O objeto pode salvar e carregar seu estado em um local nomeado por um moniker. O controle chama IMoniker::BindToStorage para recuperar a interface de armazenamento necessária, como IStorage, IStream, ILockBytes, IDataObject etc.

Embora o suporte para IPersistPropertyBag seja opcional, ele é altamente recomendado como uma otimização para contêineres com recursos salvar como texto, como Visual Basic.

Com exceção de IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMax e IPersistMemory::GetSizeMax, todos os métodos de cada interface devem ser totalmente implementados.

Controles