Interfaces de persistência
Os 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 a partir 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 expansível IStream.
Um conjunto de categorias de componentes é identificado para cobrir o suporte para interfaces de persistência, consulte Categorias de componentes.
Interface | Utilização |
---|---|
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 IStorage instância. Os controles que desejam ser marcados como Insertable 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 apelido. 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, é altamente recomendado como uma otimização para contêineres com recursos Salvar como texto, como o Visual Basic.
Com exceção de IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMaxe IPersistMemory::GetSizeMax, todos os métodos de cada interface devem ser totalmente implementados.