Administrar propiedades
Cada propiedad consta de un identificador de propiedad (único dentro de su conjunto de propiedades), una etiqueta de tipo variant (VT o VarType) que representa el tipo de un valor y el propio valor . La etiqueta de tipo variant describe la representación de los datos en el valor. Además, a una propiedad también se le puede asignar un nombre de cadena que se puede usar para identificar la propiedad, en lugar de usar el identificador numérico de propiedad (ID) necesario. Para crear y administrar propiedades, COM define la interfaz IPropertyStorage .
La interfaz IPropertyStorage incluye métodos para leer y escribir matrices de propiedades o nombres de propiedad. La interfaz incluye métodos Commit y Revert similares a los métodos IStorage del mismo nombre. Hay métodos de utilidad que permiten establecer el identificador de clase (CLSID) del conjunto de propiedades, establecer las horas asociadas al conjunto y obtener estadísticas sobre el conjunto de propiedades. Por último, el método Enum crea un enumerador y devuelve un puntero a su interfaz IEnumSTATPROPSTG . Puede llamar a los métodos de esta interfaz para enumerar estructuras STATPROPSTG en el objeto, que proporcionará información sobre todas las propiedades del conjunto de propiedades actual.
A continuación se muestra un ejemplo de cómo se representan las propiedades. Si una propiedad específica de un conjunto de propiedades contiene el nombre científico de un animal, ese nombre podría almacenarse como una cadena terminada en cero. Almacenado junto con el nombre sería un indicador de tipo para indicar que el valor es una cadena terminada en cero. Estas propiedades pueden tener las siguientes características:
Id. de propiedad | Identificador de cadena | Indicador de tipo | Valor representado |
---|---|---|---|
02 | PID_ANIMALNAME | VT_LPWSTR | Cadena Unicode terminada en cero |
03 | PID_LEGCOUNT | VT_I2 | WORD |
Cualquier aplicación que reconozca el formato del conjunto de propiedades ,que lo identifique a través de su identificador de formato (FMTID), puede examinar la propiedad con un identificador de PID_ANIMALNAME, determinar que es una cadena terminada en cero y leer y escribir el valor. Aunque la aplicación puede llamar a IPropertyStorage::ReadMultiple para leer cualquiera o todos los conjuntos de propiedades (habiendo obtenido primero un puntero), la aplicación debe saber cómo interpretar el conjunto de propiedades.
Un valor de propiedad se pasa a través de interfaces de propiedad como una instancia del tipo PROPVARIANT.
Es importante distinguir entre estas propiedades almacenadas (persistentes) y las propiedades en tiempo de ejecución. Las constantes de valor de tipo variant tienen nombres que comienzan por VT_. Sin embargo, el conjunto de PROPVARIANTs válidos no es totalmente equivalente al conjunto de VARIANT usados en los controles Automation y ActiveX.
La única diferencia entre las dos estructuras es el conjunto permitido de etiquetas de VT_ (Variant Type / VarType) en cada una. Donde se puede usar un tipo de propiedad determinado en un valor VARIANT y propVARIANT, la etiqueta de tipo (el valor de VT_) siempre tiene un valor idéntico. Además, para un valor de VT_ determinado, la representación en memoria usada en VARIANTs y PROPVARIANTs es idéntica. En conjunto, este enfoque permite que el sistema de tipos detecte etiquetas de tipo no permitidas, al mismo tiempo que permite a un cliente con conocimientos implementar una conversión de puntero cuando corresponda.
Para obtener más información, vea la sección siguiente Consideraciones sobre el almacenamiento de propiedades.