Gestion des propriétés
Chaque propriété se compose d’un identificateur de propriété (unique dans son jeu de propriétés), d’une balise de type variant (VT ou VarType) qui représente le type d’une valeur et de la valeur elle-même. La balise de type variant décrit la représentation des données dans la valeur. En outre, une propriété peut également se voir attribuer un nom de chaîne qui peut être utilisé pour identifier la propriété, plutôt que d’utiliser l’identificateur de propriété numérique (ID) requis. Pour créer et gérer des propriétés, COM définit l’interface IPropertyStorage .
L’interface IPropertyStorage inclut des méthodes permettant de lire et d’écrire des tableaux de propriétés ou de noms de propriétés. L’interface inclut des méthodes Commit et Revert similaires aux méthodes IStorage du même nom. Il existe des méthodes utilitaires qui vous permettent de définir l’identificateur de classe (CLSID) du jeu de propriétés, de définir les heures associées au jeu et d’obtenir des statistiques sur le jeu de propriétés. Enfin, la méthode Enum crée un énumérateur et retourne un pointeur vers son interface IEnumSTATPROPSTG . Vous pouvez appeler les méthodes de cette interface pour énumérer les structures STATPROPSTG sur votre objet, ce qui fournira des informations sur toutes les propriétés du jeu de propriétés actuel.
Voici un exemple de la façon dont les propriétés sont représentées. Si une propriété spécifique dans un jeu de propriétés contient le nom scientifique d’un animal, ce nom peut être stocké sous la forme d’une chaîne sans fin. Stocké avec le nom serait un indicateur de type pour indiquer que la valeur est une chaîne à terminaison zéro. Ces propriétés peuvent avoir les caractéristiques suivantes :
ID de propriété | Identificateur de chaîne | Indicateur de type | Valeur représentée |
---|---|---|---|
02 | PID_ANIMALNAME | VT_LPWSTR | Chaîne Unicode terminée sans fin |
03 | PID_LEGCOUNT | VT_I2 | WORD |
Toute application qui reconnaît le format du jeu de propriétés , l’identifiant via son identificateur de format (FMTID) , peut examiner la propriété avec un identificateur de PID_ANIMALNAME, déterminer qu’il s’agit d’une chaîne terminée sans fin, et lire et écrire la valeur. Bien que l’application puisse appeler IPropertyStorage::ReadMultiple pour lire tout ou partie d’un jeu de propriétés (après avoir d’abord obtenu un pointeur), l’application doit savoir interpréter le jeu de propriétés.
Une valeur de propriété est transmise via des interfaces de propriété en tant que instance du type PROPVARIANT.
Il est important de faire la distinction entre ces propriétés stockées (persistantes) et les propriétés d’exécution. Les constantes de valeur de type variant ont des noms commençant par VT_. L’ensemble de PROPVARIANTs valides n’est toutefois pas entièrement équivalent à l’ensemble de VARIANTs utilisés dans les contrôles Automation et ActiveX.
La seule différence entre les deux structures est l’ensemble autorisé de balises VT_ (Type variant /VarType) dans chacune d’elles. Lorsqu’un certain type de propriété peut être utilisé à la fois dans un VARIANT et un PROPVARIANT, la balise de type (valeur VT_) a toujours une valeur identique. En outre, pour une valeur VT_ donnée, la représentation en mémoire utilisée dans VARIANTs et PROPVARIANTs est identique. Dans l’ensemble, cette approche permet au système de type d’intercepter les balises de type non autorisées, tout en permettant à un client averti d’implémenter un cast de pointeurs le cas échéant.
Pour plus d’informations, consultez la section suivante Considérations relatives au stockage des propriétés.