Stockage de jeux de propriétés
Les applications peuvent exposer certaines des données d’état de leurs documents afin que d’autres applications puissent localiser et lire ces données. Par exemple, un jeu de propriétés décrivant l’auteur, le titre et les mots clés d’un document créé avec un traitement de texte, ou la liste des polices utilisées dans un document. Cette facilité n’est pas limitée aux documents; il peut également être utilisé sur des objets incorporés. En règle générale, l’accès aux jeux de propriétés doit se faire par le biais des interfaces IPropertySetStorage et IPropertyStorage , mais cette section décrit la méthode précédemment recommandée.
Notes
Si vous stockez un jeu de propriétés interne à votre application, vous pouvez ne pas utiliser les instructions suivantes. Pour exposer votre jeu de propriétés à d’autres applications, suivez ces instructions.
Pour stocker un jeu de propriétés dans un fichier composé
- Créez un instance IStorage ou IStream au même niveau de la structure de stockage que ses flux de données. Suivez le nom de votre instance IStorage ou IStream avec « \005 ». Les noms de flux et de stockage commençant par 0x05 sont réservés aux ensembles de propriétés communs qui peuvent être partagés entre les applications. En outre, les flux commençant par cette valeur sont limités à 256 Ko. Les noms peuvent être sélectionnés à partir de noms et de formats publiés, ou en affectant à la propriété un FMTID et en dérivant le nom du FMTID conformément aux conventions décrites dans Conventions de nommage des objets de stockage.
- Un jeu de propriétés peut être stocké dans un seul instance IStream ou dans un instance IStorage contenant plusieurs flux et stockages. Dans le cas d’un instance IStorage, le flux contenu est le flux principal contenant des valeurs de propriété, où certaines valeurs peuvent être des noms d’autres flux ou instances de stockage dans le stockage pour cet ensemble de propriétés.
- Spécifiez le CLSID de la classe d’objet qui peut afficher ou fournir un accès par programmation aux valeurs de propriété. S’il n’existe aucune classe de ce type, le CLSID doit être défini sur l’identificateur de format du jeu de propriétés. Pour un jeu de propriétés qui utilise un instance IStorage, définissez le CLSID du instance IStorage pour qu’il soit identique à celui stocké dans le flux Contenu ou à CLSID_NULL; la valeur d’un instance IStorage nouvellement créé.
- Vous avez la possibilité de spécifier des noms pouvant être affichés qui forment le contenu du dictionnaire.
Certaines applications peuvent lire uniquement les implémentations de jeux de propriétés stockés en tant qu’instances IStream . Les applications doivent être écrites pour s’attendre à ce qu’un jeu de propriétés soit stocké dans un instance IStorage ou IStream, sauf indication contraire de la définition du jeu de propriétés. Par exemple, la définition de l’ensemble de propriétés Informations récapitulatives indique qu’il ne peut être stocké que dans un instance IStream nommé. Dans les cas où vous recherchez un jeu de propriétés et ne savez pas s’il s’agit d’un stockage ou d’un flux, recherchez un instance IStream avec le nom de votre jeu de propriétés en premier. Si cela échoue, recherchez un instance IStorage.
Pour mieux comprendre le stockage des jeux de propriétés dans une implémentation IStorage , supposons qu’il existe une classe d’applications qui modifient des informations sur les animaux. Tout d’abord, un CLSID (CLSID_AnimalApp) est défini pour cet ensemble d’applications, afin qu’elles puissent indiquer qu’elles comprennent les jeux de propriétés qui contiennent des informations sur les animaux (FMTID_AnimalInfo) et d’autres qui contiennent des informations médicales (FMTID_MedicalInfo).
IStorage (File): "C:\OLE\REVO.DOC"
IStorage: "\005AnimalInfo", CLSID = CLSID_AnimalApp
IStream: "Contents"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = FMTID_AnimalInfo
Property: Type = PID_ANIMALTYPE, Type = VT_LPWSTR,
Value = L"Dog"
Property: Type = PID_ANIMALNAME, Type = VT_LPWSTR,
Value = L"Revo"
Property: Type = PID_MEDICALHISTORY, Type = VT_STREAMED_OBJECT,
Value = "MedicalInfo"
...
IStream: "MedicalInfo"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = CLSID_MedicalInfo
Property: Type = PID_VETNAME, Type = VT_LPWSTR,
Value = L"Dr. Woof"
Property: Type = PID_LASTEXAM, Type = VT_DATE, Value = ...
N’oubliez pas que le CLSID de l’interface IStorage et des deux jeux de propriétés est CLSID_AnimalApp. Cela identifie toute application qui peut afficher et/ou fournir un accès par programmation à ces jeux de propriétés. Toute application peut lire les données dans les jeux de propriétés (les jeux de propriétés de point derrière), mais seules les applications identifiées avec l’identificateur de classe de CLSID_AnimalApp peuvent comprendre la signification des données dans les jeux de propriétés.