Функция PropVariantToStringAlloc (propvarutil.h)
Извлекает строковое значение свойства из структуры PROPVARIANT .
Синтаксис
PSSTDAPI PropVariantToStringAlloc(
[in] REFPROPVARIANT propvar,
[out] PWSTR *ppszOut
);
Параметры
[in] propvar
Тип: REFPROPVARIANT
Ссылка на исходную структуру PROPVARIANT .
[out] ppszOut
Тип: PWSTR*
При возврате этой функцией содержит указатель на извлеченное значение свойства, если оно существует.
Возвращаемое значение
Тип: HRESULT
Если эта функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .
Комментарии
Эта вспомогающая функция используется в тех местах, где вызывающее приложение ожидает , что PROPVARIANT будет содержать строковое значение.
Если исходный PROPVARIANT имеет тип VT_LPWSTR или VT_BSTR, эта функция извлекает строку в только что выделенный буфер. В противном случае он пытается преобразовать значение в структуре PROPVARIANT в строку. Если преобразование невозможно, PropVariantToStringAlloc вернет код сбоя и присвоит ppszOut значение NULL. Список возможных преобразований см. в разделе PropVariantChangeType . Следует отметить, что VT_EMPTY успешно преобразуется в выделенный буфер, содержащий "".
Вызывающее приложение отвечает за использование CoTaskMemFree для освобождения строки, на которую указывает ppszOut , когда она больше не нужна.
В дополнение к преобразованиям, предоставляемым PropVariantChangeType, следующие особые случаи применяются к PropVariantToStringAlloc.
- PROPVARIANT с векторным значением преобразуются в строки путем разделения каждого элемента с помощью "; ". Например, PropVariantToStringAlloc преобразует вектор из трех целых чисел {3, 1, 4} в строку "3; 1; 4". Точка с запятой не зависит от текущего языкового стандарта.
- VT_BLOB, VT_STREAM, VT_STREAMED_OBJECT и VT_UNKNOWN значения преобразуются в строки с использованием неподдерживаемой кодировки. Невозможно декодировать строки, созданные таким образом, и формат может измениться в будущем.
Примеры
// IPropertyStore *ppropstore;
// Assume variable ppropstore is initialized and valid
PROPVARIANT propvar = {0};
HRESULT hr = ppropstore->GetValue(PKEY_Title, &propvar);
if (SUCCEEDED(hr))
{
// PKEY_Title is expected to produce a VT_LPWSTR or VT_EMPTY value.
// PropVariantToStringAlloc will convert VT_EMPTY to "".
LPWSTR pszTitle;
hr = PropVariantToString(propvar, &pszTitle);
if (SUCCEEDED(hr))
{
// pszTitle is now valid
}
else
{
// pszTitle is always NULL
}
PropVariantClear(&propvar);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP с пакетом обновления 2 (SP2), Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 с пакетом обновления 1 (SP1) [только классические приложения] |
Целевая платформа | Windows |
Header | propvarutil.h |
Библиотека | Propsys.lib |
DLL | Propsys.dll (версия 6.0 или более поздняя) |
Распространяемые компоненты | Windows Desktop Search (WDS) 3.0 |