Поделиться через


Функция PropVariantToStringVector (propvarutil.h)

Извлекает вектор строк из структуры PROPVARIANT .

Синтаксис

PSSTDAPI PropVariantToStringVector(
  [in]  REFPROPVARIANT propvar,
  [out] PWSTR          *prgsz,
  [in]  ULONG          crgsz,
  [out] ULONG          *pcElem
);

Параметры

[in] propvar

Тип: REFPROPVARIANT

Ссылка на исходную структуру PROPVARIANT .

[out] prgsz

Тип: PWSTR*

Указатель на вектор строковых указателей. При возврате этой функции буфер инициализирован элементами pcElem , указывающими на вновь выделенные строки, содержащие данные, извлеченные из источника PROPVARIANT.

[in] crgsz

Тип: ULONG

Размер буфера, на который указывает prgsz, в элементах.

[out] pcElem

Тип: ULONG*

При возврате этой функции содержит количество строк, извлеченных из исходной структуры PROPVARIANT .

Возвращаемое значение

Тип: HRESULT

Эта функция может возвращать одно из этих значений.

Код возврата Описание
S_OK
Возвращает S_OK в случае успешного выполнения или значение ошибки в противном случае.
TYPE_E_BUFFERTOOSMALL
ИсходныйPROPVARIANT содержал больше значений crgsz . Буфер, на который указывает prgsz.
E_INVALIDARG
PROPVARIANT не был соответствующего типа.

Комментарии

Эта вспомогающая функция используется в местах, где вызывающее приложение ожидает , что PROPVARIANT будет содержать вектор строковых значений с фиксированным числом элементов.

Эта функция работает для следующих типов PROPVARIANT :

  • VT_VECTOR | VT_LPWSTR
  • VT_VECTOR | VT_BSTR
  • VT_ARRAY | VT_BSTR
Если исходный PROPVARIANT имеет поддерживаемый тип, эта вспомогающая функция извлекает до строковых значений crgsz и помещает выделенную копию каждого из них в буфер, на который указывает prgsz. Если PROPVARIANT содержит больше элементов, чем помещается в буфер prgsz , эта функция возвращает ошибку и устанавливает для pcElem значение 0.

Так как каждая строка в , на которую указывает выходной буфер, была выделена, вызывающее приложение отвечает за использование CoTaskMemFree для освобождения каждой строки в выходном буфере, когда они больше не нужны.

Если BSTR в исходном PROPVARIANT имеет значение NULL, она преобразуется в только что выделенную строку, содержащую "" в выходных данных.

Примеры

// PROPVARIANT propvar;
// Assume the variable propvar is initialized and valid
LPWSTR rgszStrings; // The application is expecting propvar to hold 4 strings in a vector
ULONG cElems;
HRESULT hr = PropVariantToStringVector(propvar, rgszStrings, ARRAYSIZE(rgszStrings), &cElems);
if (SUCCEEDED(hr))
{
     if (cElems == ARRAYSIZE(rgszStrings))
     {
         // The application got 4 string which are now stored in rgszStrings
     }
     else
     {
         // The application got cElems which are stored in the first cElems elements of rgLongs
     }
 
    // Free the cElems strings that PropVariantToStringVector allocated
    for (ULONG i = 0; i < cElems; i++)
    {
        CoTaskMemFree(rgszStrings[i]);
    }
}

Требования

Требование Значение
Минимальная версия клиента 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

См. также раздел

InitPropVariantFromStringVector

PropVariantGetStringElem

PropVariantToString

PropVariantToStringVectorAlloc

VariantToStringArray