Compartilhar via


Interfaces de persistência

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

Se um controle tiver qualquer estado persistente, ele deve, no mínimo, implementar IPersistStream ou IPersistStreamInit (os dois são mutuamente exclusivos e não devem ser implementados juntos na maior parte). Este último é usado quando um controle deseja saber quando ele é criado novo, em vez de recarregado de um estado persistente existente (IPersistStream não tem o novo recurso criado). 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 de IStream.

Além dessas duas interfaces baseadas em fluxo, as interfaces IPersist* listadas na tabela a seguir podem ser fornecidas opcionalmente para oferecer 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, consulte Categorias de componentes.

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 Inseríveis como outros objetos de documento compostos (para inserção em contêineres sem reconhecimento de controle) devem oferecer suporte a essa interface.
IPersistPropertyBag
O objeto pode salvar e carregar seu estado como propriedades individuais gravadas em 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 recomendável como uma otimização para contêineres com recursos de Salvar como texto, como o 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