Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Cada propriedade consiste em um identificador de propriedade (exclusivo dentro de seu conjunto de propriedades), uma marca de tipo variante (VT ou VarType) que representa o tipo de um valor e o próprio valor . A marca de tipo variante descreve a representação dos dados no valor . Além disso, uma propriedade também pode receber um nome de cadeia de caracteres que pode ser usado para identificar a propriedade, em vez de usar o ID (identificador de propriedade numérica) necessário. Para criar e gerenciar propriedades, COM define a interface IPropertyStorage .
A interface IPropertyStorage inclui métodos para ler e gravar matrizes de propriedades ou nomes de propriedade. A interface inclui métodos Commit e Revert semelhantes aos métodos IStorage de mesmo nome. Há métodos utilitários que permitem definir o CLSID (identificador de classe) do conjunto de propriedades, definir os horários associados ao conjunto e obter estatísticas sobre o conjunto de propriedades. Por fim, o método Enum cria um enumerador e retorna um ponteiro para sua interface IEnumSTATPROPSTG . Você pode chamar os métodos dessa interface para enumerar estruturas STATPROPSTG em seu objeto, o que fornecerá informações sobre todas as propriedades no conjunto de propriedades atual.
Veja a seguir um exemplo de como as propriedades são representadas. Se uma propriedade específica em um conjunto de propriedades tiver o nome científico de um animal, esse nome poderá ser armazenado como uma cadeia de caracteres terminada em zero. Armazenado junto com o nome seria um indicador de tipo para indicar que o valor é uma cadeia de caracteres terminada em zero. Essas propriedades podem ter as seguintes características:
| ID da propriedade | Identificador de cadeia de caracteres | Indicador de tipo | Valor representado |
|---|---|---|---|
| 02 | PID_ANIMALNAME | VT_LPWSTR | Cadeia de caracteres Unicode terminada em zero |
| 03 | PID_LEGCOUNT | VT_I2 | WORD |
Qualquer aplicativo que reconheça o formato do conjunto de propriedades , identificando-o por meio de seu FMTID (identificador de formato) - pode examinar a propriedade com um identificador de PID_ANIMALNAME, determinar que é uma cadeia de caracteres terminada em zero e ler e gravar o valor. Embora o aplicativo possa chamar IPropertyStorage::ReadMultiple para ler qualquer ou todo um conjunto de propriedades (tendo obtido primeiro um ponteiro), o aplicativo deve saber como interpretar o conjunto de propriedades.
Um valor de propriedade é passado por meio de interfaces de propriedade como uma instância do tipo PROPVARIANT.
É importante distinguir entre essas propriedades armazenadas (persistentes) e as propriedades de tempo de execução. Constantes de valor de tipo variante têm nomes que começam com VT_. No entanto, o conjunto de PROPVARIANTs válido não é totalmente equivalente ao conjunto de VARIANTs usado em controles de Automação e ActiveX.
A única diferença entre as duas estruturas é o conjunto permitido de marcas VT_ (Variant Type/VarType) em cada uma. Quando um determinado tipo de propriedade pode ser usado em um VARIANT e um PROPVARIANT, a marca de tipo (o valor VT_) sempre tem um valor idêntico. Além disso, para um determinado valor VT_, a representação na memória usada em VARIANTs e PROPVARIANTs é idêntica. Juntamente, essa abordagem permite que o sistema de tipos capture marcas de tipo não permitidas e, ao mesmo tempo, permita que um cliente experiente implemente uma conversão de ponteiro quando apropriado.
Para obter mais informações, consulte a seção a seguir, Considerações sobre o armazenamento de propriedades.