Управление свойствами

Каждое свойство состоит из идентификатора свойства (уникального в пределах набора свойств), тега variant type (VT или VarType), представляющего тип значения, и самого значения . Тег типа variant описывает представление данных в значении. Кроме того, свойству также может быть присвоено строковое имя , которое можно использовать для идентификации свойства, а не обязательного числового идентификатора свойства (ID). Для создания свойств и управления ими COM определяет интерфейс IPropertyStorage .

Интерфейс IPropertyStorage включает методы для чтения и записи массивов свойств или имен свойств. Интерфейс включает методы Commit и Revert , аналогичные методам IStorage с тем же именем. Существуют служебные методы, позволяющие задать идентификатор класса (CLSID) набора свойств, задать время, связанное с набором, и получить статистику по набору свойств. Наконец, метод Enum создает перечислитель и возвращает указатель на его интерфейс IEnumSTATPROPSTG . Вы можете вызвать методы этого интерфейса для перечисления структур STATPROPSTG в объекте , которые будут предоставлять сведения обо всех свойствах в текущем наборе свойств.

Ниже приведен пример представления свойств. Если определенное свойство в наборе свойств содержит научное имя животного, это имя может храниться в виде строки с нулевым завершением. Хранящееся вместе с именем будет индикатором типа, указывающим, что значение является строкой с нулем. Эти свойства могут иметь следующие характеристики:

Идентификатор свойства Строковый идентификатор Индикатор типа Представленное значение
02 PID_ANIMALNAME VT_LPWSTR Строка Юникода с нулевым завершением
03 PID_LEGCOUNT VT_I2 WORD

 

Любое приложение, которое распознает формат набора свойств, идентифицируя его с помощью идентификатора формата (FMTID), может просмотреть свойство с идентификатором PID_ANIMALNAME, определить, что это строка с нулем, а также считывать и записывать значение. Хотя приложение может вызывать IPropertyStorage::ReadMultiple для чтения любого или всего набора свойств (сначала получив указатель), приложение должно знать, как интерпретировать набор свойств.

Значение свойства передается через интерфейсы свойств как экземпляр типа PROPVARIANT.

Важно различать эти хранимые (постоянные) свойства и свойства времени выполнения. Имена констант значений типа variant начинаются с VT_. Однако набор допустимых PROPVARIANT не полностью эквивалентен набору VARIANT, используемому в элементах автоматизации и ActiveX.

Единственное различие между двумя структурами заключается в допустимом наборе тегов VT_ (Variant Type/VarType) в каждой из них. Если определенный тип свойства можно использовать как в VARIANT, так и в PROPVARIANT, тег типа (значение VT_) всегда имеет идентичное значение. Кроме того, для заданного значения VT_ представление в памяти, используемое в VARIANT и PROPVARIANTs, идентично. В совокупности этот подход позволяет системе типов перехватывать запрещенные теги типов, в то же время позволяя осведомленному клиенту при необходимости реализовать приведение указателя.

Дополнительные сведения см. в следующем разделе Рекомендации по хранилищу свойств.