Interfaces de persistance
Les objets qui ont un état persistant de tout type doivent implémenter au moins une interface IPersist*, et de préférence plusieurs interfaces, afin de fournir au conteneur le choix le plus flexible de la façon dont il souhaite enregistrer l’état d’un contrôle.
Si un contrôle a un état persistant, il doit, au minimum, implémenter IPersistStream ou IPersistStreamInit (les deux s’excluent mutuellement et ne doivent pas être implémentés ensemble pour la plupart). Ce dernier est utilisé lorsqu’un contrôle souhaite savoir quand il est créé par opposition à un rechargement à partir d’un état persistant existant (IPersistStream n’a pas la fonctionnalité créée). L’existence de l’une ou l’autre interface indique que le contrôle peut enregistrer et charger son état persistant dans un flux, c’est-à-dire un instance d’IStream.
Au-delà de ces deux interfaces basées sur des flux, les interfaces IPersist* répertoriées dans le tableau suivant peuvent éventuellement être fournies afin de prendre en charge la persistance à des emplacements autres qu’un IStream extensible.
Un ensemble de catégories de composants est identifié pour couvrir la prise en charge des interfaces de persistance, consultez Catégories de composants.
Interface | Utilisation |
---|---|
IPersistMemory |
L’objet peut enregistrer et charger son état dans un tableau séquentiel d’octets de longueur fixe (en mémoire). |
IPersistStorage |
L’objet peut enregistrer et charger son état dans un instance IStorage. Les contrôles qui souhaitent être marqués Insertable en tant qu’autres objets de document composés (pour insertion dans des conteneurs ne prenant pas en charge le contrôle) doivent prendre en charge cette interface. |
IPersistPropertyBag |
L’objet peut enregistrer et charger son état en tant que propriétés individuelles écrites dans IPropertyBag que le conteneur implémente. Il est utilisé pour la fonctionnalité Enregistrer en tant que texte dans certains conteneurs. |
IPersistMoniker |
L’objet peut enregistrer et charger son état à un emplacement nommé par un moniker. Le contrôle appelle IMoniker::BindToStorage pour récupérer l’interface de stockage dont il a besoin, telle que IStorage, IStream, ILockBytes, IDataObject, etc. |
Bien que la prise en charge d’IPersistPropertyBag soit facultative, elle est fortement recommandée en tant qu’optimisation pour les conteneurs dotés de fonctionnalités Enregistrer en tant que texte, telles que Visual Basic.
À l’exception de IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMax et IPersistMemory::GetSizeMax, toutes les méthodes de chaque interface doivent être entièrement implémentées.