Interfacce di persistenza
Gli oggetti con uno stato permanente di qualsiasi tipo devono implementare almeno un'interfaccia IPersist* e preferibilmente più interfacce per fornire al contenitore la scelta più flessibile di come salvare lo stato di un controllo.
Se un controllo ha uno stato permanente, deve, come minimo, implementare IPersistStream o IPersistStreamInit (i due si escludono a vicenda e non devono essere implementati insieme per la maggior parte). Quest'ultimo viene usato quando un controllo desidera sapere quando viene creato nuovo anziché ricaricarlo da uno stato persistente esistente (IPersistStream non dispone della nuova funzionalità creata). L'esistenza di una delle due interfacce indica che il controllo può salvare e caricare il relativo stato persistente in un flusso, ovvero un'istanza di IStream.
Oltre a queste due interfacce basate su flusso, le interfacce IPersist* elencate nella tabella seguente possono essere fornite facoltativamente per supportare la persistenza in posizioni diverse da un IStream espandibile.
Viene identificato un set di categorie di componenti per coprire il supporto per le interfacce di persistenza, vedere Categorie di componenti.
Interfaccia | Utilizzo |
---|---|
Ipersistmemory |
L'oggetto può salvare e caricare lo stato in una matrice di byte sequenziale a lunghezza fissa (in memoria). |
IPersist Archiviazione |
L'oggetto può salvare e caricarne lo stato in un'istanza di I Archiviazione. I controlli che desiderano essere contrassegnati come insertable come altri oggetti documento composti (per l'inserimento in contenitori che non supportano il controllo) devono supportare questa interfaccia. |
IPersistPropertyBag |
L'oggetto può salvare e caricare lo stato come singole proprietà scritte in IPropertyBag che il contenitore implementa. Viene usato per la funzionalità Salva come testo in alcuni contenitori. |
IPersistMoniker |
L'oggetto può salvare e caricare il relativo stato in una posizione denominata da un moniker. Il controllo chiama IMoniker::BindTo Archiviazione per recuperare l'interfaccia di archiviazione necessaria, ad esempio I Archiviazione, IStream, ILockBytes, IDataObject e così via. |
Anche se il supporto per IPersistPropertyBag è facoltativo, è consigliabile ottimizzare i contenitori con le funzionalità Salva come testo, ad esempio Visual Basic.
Ad eccezione di IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMax e IPersistMemory::GetSizeMax, tutti i metodi di ogni interfaccia devono essere completamente implementati.