Идентификаторы зарезервированных свойств
Зарезервированные идентификаторы свойств нельзя использовать в качестве идентификаторов свойств . Можно использовать любой идентификатор свойства, кроме 0, 1 и любого значения, превышающего или равного 0x80000000. Эти значения идентификаторов свойств зарезервированы для использования приложениями.
В следующей таблице перечислены зарезервированные идентификаторы свойств и описание того, для чего зарезервирован идентификатор свойства.
Идентификатор зарезервированного свойства | Описание |
---|---|
0 | Зарезервировано для создания необязательного словаря отображаемых имен набора свойств. Это позволяет пользователям, устанавливающим свойства, прикреплять значение к свойствам, помимо значений, предоставляемых индикатором типа. |
1 | Зарезервировано в качестве индикатора кодовой страницы (Windows) или скрипта (Macintosh) для интерпретации строк в наборе свойств. Все строковые значения в наборе свойств должны храниться на одной кодовой странице. Исходное значение операционной системы в заголовке набора свойств (PROPERTYSETHEADER::d wOSVer) определяет, соответствует ли индикатор кодовой страницы кодовой странице Windows или скрипту Macintosh. |
0x80000000 | Зарезервировано как указание языкового стандарта, для которого записывается набор свойств. Языковой стандарт по умолчанию для набора свойств — системный языковой стандарт по умолчанию (LOCALE_SYSTEM_DEFAULT). Дополнительные сведения о LOCALE_SYSTEM_DEFAULT см. в api-интерфейсах Win32. Значение по умолчанию используется в случае, если индикатор языкового стандарта не существует в наборе свойств. |
0x80000003 | Зарезервировано в качестве индикатора поведения набора свойств. Это значение идентификатора свойства является VT_UI4 и начинается с типа данных DWORD , содержащего значение VT_UI4 за которым следует DWORD , указывающий поведение набора свойств. В настоящее время единственным битом в этом значении, который определен, является бит низкого порядка (0x1). Если этот бит задан, это означает, что имена наборов свойств, указанные идентификатором свойства 0, должны учитывать регистр. Если этот бит не задан или свойство поведения (идентификатор 0x80000003) не существует, имена должны считаться нечувствительными к регистру. |
0xFFFFFFFF | Зарезервировано для удобства программирования. Он никогда не должен отображаться в сериализованном наборе свойств. |
Идентификаторы свойств с большим набором битов (т. е. отрицательные значения) зарезервированы для использования корпорацией Майкрософт в будущем.
Из зарезервированных свойств те, у которых значения идентификаторов в диапазоне 0x80000000 0xBFFFFFFF, считаются доступными только для чтения в реализациях, которые не понимают их значения. Например, если реализация не понимает значения свойства 0x80000000, она должна разрешить чтение этого свойства, но не записывать или удалять. Такая реализация должна позволить считывать, записывать или удалять свойство в диапазоне 0xC0000000 0xFFFFFFFE. Идентификатор свойства 0xFFFFFFFF является зарезервированным значением и никогда не должен отображаться в сериализованном наборе свойств.
Языковой стандарт набора свойств
Приложения могут поддерживать языковой стандарт или использовать поведение по умолчанию. Рекомендуется, чтобы приложения разрешали пользователям указывать рабочий языковой стандарт. Такие приложения должны записывать в свойство идентификатор языкового стандарта, заданный пользователем. Приложения, использующие языковой стандарт пользователя по умолчанию (LOCALE_USER_DEFAULT), должны записывать в свойство идентификатор языкового стандарта пользователя по умолчанию. Дополнительные сведения о LOCALE_USER_DEFAULT см. в разделе API Win32.
Примечание
Если интерфейс IPropertySetStorage используется для создания набора свойств, языковой стандарт пользователя по умолчанию автоматически записывается как индикатор языкового стандарта.
Приложения также должны обрабатывать случай внешнего объекта, который является тем, где языковой стандарт не является языковым стандартом приложения, языковым стандартом пользователя или системным языковым стандартом.
Свойство индикатора языкового стандарта имеет тип VT_U14 и поэтому состоит из DWORD , содержащего VT_U14, за которым следует DWORD , содержащий идентификатор языкового стандарта (LCID), как определено в API Win32.
Индикатор кодовой страницы
Если приложение, которое не является автором набора свойств, изменяет свойство типа string в наборе, оно должно проверить индикатор кодовой страницы и выполнить одно из следующих действий:
- Запишите строку в формате, указанном индикатором кодовой страницы.
- Замените и перепишите, чтобы изменить кодовую страницу.
Если приложение не распознает этот индикатор, оно не должно изменять свойство . Все создатели наборов свойств должны написать индикатор кодовой страницы; Однако если индикатор кодовой страницы отсутствует, следует предположить преобладающую кодовую страницу на компьютере читателя.
Примечание
Если интерфейс IPropertySetStorage используется для создания набора свойств, индикатор кодовой страницы записывается автоматически.
Возможные значения для кодовой страницы приведены в API Win32 (дополнительные сведения см. в функции GetACP ) и Inside Macintosh Volume VI, страницы 14–111. (Эти ресурсы могут быть недоступны на некоторых языках и в некоторых странах.) Например, кодовая страница US ANSI представлена 0x04E4 (1252 в десятичном формате), а кодовая страница юникода — 0x04B0 (1200 в десятичном формате).
Рекомендуется по возможности использовать кодовую страницу Юникода и использовать VT_LPWSTR вместо VT_LPSTR, чтобы избежать многобайтовых <> преобразований в Юникоде во время хранения и извлечения. Использование одной и той же кодовой страницы для всех наборов свойств является единственным способом обеспечения взаимодействия наборов свойств во всем мире. На кодовой странице в Юникоде или не в Юникоде имейте в виду, что счетчик в начале VT_LPSTR или VT_BSTR является числом байтов , а не числом символов . Это число байтов включает один или два нулевых байта в конце строки (признак конца строки NULL ).
Свойство с идентификатором 1 является типом VT_I2 и начинается с DWORD , содержащего значение VT_I2 за которым следует short , обозначающее кодовую страницу.