Функция PSCoerceToCanonicalValue (propsys.h)
Преобразует значение свойства в каноническое значение в соответствии с описанием свойства.
Синтаксис
PSSTDAPI PSCoerceToCanonicalValue(
[in] REFPROPERTYKEY key,
[in, out] PROPVARIANT *ppropvar
);
Параметры
[in] key
Тип: REFPROPERTYKEY
Ссылка на структуру PROPERTYKEY , идентифицирующая свойство, значение которого должно быть принудено.
[in, out] ppropvar
Тип: PROPVARIANT*
В элементе содержит указатель на структуру PROPVARIANT , содержащую исходное значение. При успешном возвращении этой функции содержит каноническое значение.
Возвращаемое значение
Тип: HRESULT
Возможные возвращаемые значения:
Код возврата | Описание |
---|---|
|
Функция выполнена успешно. Значение свойства, заданное ppropvar , теперь находится в канонической форме. |
|
Значение свойства, заданное ppropvar , теперь находится в усеченной канонической форме. |
|
Недопустимый параметр ppropvar . Структура PROPVARIANT была очищена. |
|
Приведение типа значения к типу описания свойства невозможно. Структура PROPVARIANT была очищена. |
|
Приведение типа значения к типу описания свойства невозможно. Структура PROPVARIANT была очищена. |
Комментарии
Эта функция является оболочкой для системной реализации IPropertyDescription::CoerceToCanonicalValue.
В большинстве описаний свойств указывается тип, который должны использоваться их значениями. Например, в описании свойства System.Title указано, что значения System.Title должны быть типа VT_LPWSTR. Эта функция приводит значения к этому типу, а затем приводит результат в каноническую форму.
Важно отметить, что в случае сбоя этой функции она уже вызовет PropVariantClear для входной структуры PROPVARIANT . Только в случае успешного выполнения этой функции вызывается приложение, ответственное за вызов PropVariantClear в ppropvar , когда структура больше не нужна.
Приведение, выполняемое этой функцией, также выполняется системой свойств во время вызовов IPropertyStore::GetValue и IPropertyStore::SetValue. Приложения могут зависеть от системы свойств для выполнения приведения или использовать эту функцию для выполнения приведения в момент выбора приложения.
Приведение выполняется в четыре этапа следующим образом:
- Следующие значения преобразуются в VT_EMPTY.
- Значения типа VT_NULL.
- Значения типа VT_LPWSTR, VT_BSTR или VT_LPSTR с указателем NULL.
- Значения типа VT_LPWSTR, VT_BSTR или VT_LPSTR, которые являются пустыми или полностью состоят из пробелов.
- Значения типа VT_FILETIME до полуночи 1601/01/02.
- Если значение не относится к типу VT_EMPTY после шага 1, оно преобразуется в тип, указанный в описании свойства. Тип описания свойства можно получить, вызвав IPropertyDescription::GetPropertyType. Сведения о том, как схема свойств влияет на тип описания свойства, см. в разделе typeInfo. Преобразования выполняются следующим образом:
- Значения типа VT_LPWSTR, VT_BSTR или VT_LPSTR преобразуются в VT_VECTOR | VT_LPWSTR с помощью InitPropVariantFromStringAsVector.
- Все остальные преобразования выполняются с помощью PropVariantChangeType.
- После шагов 2 и 3 значение преобразуется в каноническую форму на основе его типа. Канонические формы приведены в следующей таблице.
Тип значения Каноническая форма VT_EMPTY Всегда канонический. VT_LPWSTR - Нет начальных или конечных пробелов. Строка не пуста и не имеет значения NULL. Например, L "Алиса".
- Если это свойство дерева (то есть атрибут isTreeProperty элемента typeInfo имеет значение TRUE), то оно не должно иметь косую черту в начале или конце (/), не должно иметь пробелов между текстом и косой чертой и не должно иметь двух последовательных косых черт (/). Например, L "Друг/Боб".
- Приведение удаляет ненужные символы и приводит к VT_EMPTY, если содержимое отсутствует.
VT_VECTOR | VT_LPWSTR - Каждая строка в векторе должна соответствовать правилам для VT_LPWSTR, перечисленным выше. Кроме того, вектор не должен иметь дубликатов и пустых указателей.
- Если это свойство дерева, то никакое значение не может быть предком другого значения. Например, L "Friend" является предком L "Друг/Боб".
- Если содержимое отсутствует, приведение удаляет повторяющиеся символы и символы-предки и приводит к VT_EMPTY.
- Если применимо, значение проверяется в соответствии с перечислением типов описания свойства. Применяются проверки, приведенные в следующей таблице.
Тип перечисления Тип значения Каноническая форма Дискретный или диапазонный VT_EMPTY Всегда канонический Discrete VT_LPWSTR Строка соответствует одной из перечисленных строк, разрешенных для свойства . Сравнения выполняются без учета регистра. В противном случае преобразуйте значение в VT_EMPTY. Discrete Числовой Число соответствует одному из перечисленных значений, разрешенных для свойства . В противном случае преобразуйте значение в VT_EMPTY. Discrete VT_VECTOR | VT_LPWSTR Каждая строка в векторе соответствует одной из перечисленных строк, разрешенных для свойства . Сравнения выполняются без учета регистра. В противном случае удалите эту строку из вектора. Если результирующий вектор пуст, преобразуйте значение в VT_EMPTY. Discrete VT_VECTOR | Числовые Каждое число в векторе соответствует одному из перечисленных значений, допустимых для свойства . В противном случае удалите это число из вектора. Если результирующий вектор пуст, преобразуйте значение в VT_EMPTY. Колебалась VT_LPWSTR Строка существует в диапазоне, разрешенном для свойства . При сравнениях учитывается регистр. В противном случае преобразуйте значение в VT_EMPTY. Колебалась Числовой Число существует в диапазоне, разрешенном для свойства . В противном случае преобразуйте значение в VT_EMPTY. Колебалась VT_VECTOR | VT_LPWSTR Каждая строка в векторе существует в диапазоне, разрешенном для свойства . При сравнениях учитывается регистр. В противном случае удалите эту строку из вектора. Если результирующий вектор пуст, преобразуйте значение в VT_EMPTY. Колебалась VT_VECTOR | Числовые Каждое число в векторе находится в диапазоне, разрешенном для свойства . В противном случае удалите это число из вектора. Если результирующий вектор пуст, преобразуйте значение в VT_EMPTY.
Примеры
В следующем примере, который будет включен в более крупную программу, показано, как использовать PSCoerceToCanonicalValue для принуждать значение к типу, необходимому для PKEY_Keywords.
// PROPVARIANT propvar;
// Assume variable propvar is initialized and valid.
HRESULT hr = PSCoerceToCanonicalValue(PKEY_Keywords, &propvar);
if (SUCCEEDED(hr))
{
// The conversion succeeded and propvar now is of the correct type for
// PKEY_Keywords, or VT_EMPTY.
PropVariantClear(&propvar);
}
else
{
// The conversion failed and propvar is now VT_EMPTY.
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP с пакетом обновления 2 (SP2), Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 с пакетом обновления 1 (SP1) [только классические приложения] |
Целевая платформа | Windows |
Header | propsys.h |
Библиотека | Propsys.lib |
DLL | Propsys.dll (версия 6.0 или более поздняя) |
Распространяемые компоненты | Windows Desktop Search (WDS) 3.0 |