Управление свойствами
Каждое свойство состоит из идентификатора свойства (уникального в его наборе свойств), тега типа варианта (VT или VarType) , представляющего тип значения, и самого значения . Тег типа варианта описывает представление данных в значении. Кроме того, свойству может быть назначено строковое имя , которое можно использовать для идентификации свойства вместо использования требуемого числового идентификатора свойства (ID). Для создания свойств и управления ими COM определяет интерфейс IPropertyStorage.
Интерфейс IPropertyStorage включает методы для чтения и записи массивов свойств или имен свойств. Интерфейс включает методы Commit и методы Revert, аналогичные методам IStorage того же имени. Существуют служебные методы, позволяющие задать идентификатор класса (CLSID) набора свойств, задать время, связанное с набором, и получить статистику о наборе свойств. Наконец, метод Enum создает перечислитель и возвращает указатель на его интерфейс IEnumSTATPROPSTG. Методы этого интерфейса можно вызвать для перечисления структур STATPROPSTG на вашем объекте, которые будут предоставлять сведения обо всех свойствах в наборе текущих свойств.
Ниже приведен пример представления свойств. Если определенное свойство в наборе свойств содержит научное имя животного, то это имя может храниться в виде строки с нуля. Вместе с именем будет храниться индикатор типа, указывающий, что значение является строкой с нулевым окончанием. Эти свойства могут иметь следующие характеристики:
Идентификатор объекта недвижимости | Строковый идентификатор | Индикатор типа | Представленное значение |
---|---|---|---|
02 | PID_ANIMALNAME | VT_LPWSTR | Строка Юникода с нулевым окончанием |
03 | PID_LEGCOUNT | VT_I2 | СЛОВО |
Любое приложение, которое распознает формат набора свойств, идентифицируя его с помощью идентификатора формата (FMTID), может просматривать свойство с идентификатором PID_ANIMALNAME, определять, что это строка с нуля, а также чтение и запись значения. Хотя приложение может вызывать IPropertyStorage::ReadMultiple для чтения любого или всего набора свойств (получив указатель), приложение должно знать, как интерпретировать набор свойств.
Значение свойства передается через интерфейсы свойств в качестве экземпляра типа PROPVARIANT.
Важно различать эти сохраненные (постоянные) свойства и свойства времени выполнения. Константы значений типа variant имеют имена, начинающиеся с VT_. Однако набор допустимых PROPVARIANTs не полностью эквивалентен набору VARIANTs, используемому в управлении автоматизацией и ActiveX.
Единственное различие между двумя структурами — допустимый набор тегов VT_ (Variant Type / VarType) в каждом. Если определенный тип свойства можно использовать как в VARIANT, так и в PROPVARIANT, тег типа (значение VT_) всегда имеет одинаковое значение. Кроме того, для заданного значения VT_ представление в памяти, используемое в VARIANTs и PROPVARIANTs, идентично. Этот подход позволяет системе типов перехватывать запрещенные теги типов, в то же время позволяя известному клиенту реализовать приведение указателей при необходимости.
Дополнительные сведения см. в следующем разделе: Особенности хранения свойств.