Condividi tramite


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é ricaricare 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 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 Uso
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 caricare il relativo stato in un'istanza diIStorage. 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::BindToStorage per recuperare l'interfaccia di archiviazione necessaria, ad esempio IStorage, IStream, ILockBytes, IDataObjecte così via.

Sebbene il supporto per IPersistPropertyBag sia facoltativo, è consigliabile ottimizzare i contenitori con funzionalità Salva come testo, ad esempio Visual Basic.

Ad eccezione di IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMaxe IPersistMemory::GetSizeMax, tutti i metodi di ogni interfaccia devono essere completamente implementati.

controlli