Interfacce di persistenza

Gli oggetti che hanno uno stato permanente di qualsiasi tipo devono implementare almeno un'interfaccia IPersist* e preferibilmente più interfacce, per fornire al contenitore la scelta più flessibile del modo in cui desidera salvare lo stato di un controllo.

Se un controllo ha qualsiasi stato persistente, 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é ricaricato da uno stato persistente esistente (IPersistStream non ha la nuova funzionalità creata). L'esistenza di una delle due interfacce indica che il controllo può salvare e caricare lo stato permanente 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).
IPersistStorage
L'oggetto può salvare e caricarne lo stato in un'istanza di IStorage . I controlli che desiderano essere contrassegnati come inseriscibili come altri oggetti documento composti (per l'inserimento in contenitori non sensibili al controllo) devono supportare questa interfaccia.
IPersistPropertyBag
L'oggetto può salvare e caricare lo stato come singole proprietà scritte in IPropertyBag che il contenitore implementa. Questa opzione viene usata 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::BindToStorage per recuperare l'interfaccia di archiviazione necessaria, ad esempio IStorage, IStream, ILockBytes, IDataObject e così via.

Sebbene il supporto per IPersistPropertyBag sia facoltativo, è fortemente consigliato come ottimizzazione per i contenitori con 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.

Controlli