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


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

Извлекает данные из структуры PROPVARIANT в только что выделенный двойной вектор.

Синтаксис

PSSTDAPI PropVariantToDoubleVectorAlloc(
  [in]  REFPROPVARIANT propvar,
  [out] DOUBLE         **pprgn,
  [out] ULONG          *pcElem
);

Параметры

[in] propvar

Тип: REFPROPVARIANT

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

[out] pprgn

Тип: DOUBLE**

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

[out] pcElem

Тип: ULONG*

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

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

Тип: HRESULT

Если эта функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

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

Если исходный PROPVARIANT имеет тип VT_VECTOR | VT_R8 или VT_ARRAY | VT_R8 эта функция извлекает вектор двойных значений в только что выделенный вектор значений DOUBLE. Вызывающее приложение отвечает за использование CoTaskMemFree для освобождения вектора, на который указывает pprgn , когда он больше не нужен.

Примеры

В следующем примере, который будет включен в более крупную программу, показано, как использовать PropVariantToDoubleVector для доступа к двойному значению вектора в PROPVARIANT.

// IPropertyStore *ppropstore;
// Assume variable ppropstore is initialized and valid
PROPVARIANT propvar = {0};
HRESULT hr = ppropstore->GetValue(PKEY_GPS_DestLongitude, &propvar);
if (SUCCEEDED(hr))
{
     // PKEY_GPS_DestLongitude is expected to produce a VT_VECTOR | VT_R8 with three values, or VT_EMPTY
     // PropVariantToDoubleVectorAlloc will return an error for VT_EMPTY
     DOUBLE *rgLongitude;
     ULONG cElem;
     hr = PropVariantToDoubleVectorAlloc(propvar, &rgLongitude, &cElem);
     if (SUCCEEDED(hr))
     {
         if (cElem == 3)
         {
              // rgLongitude contains 3 doubles representing the degrees, minutes, and seconds of longitude
         }
         CoTaskMemFree(rgLongitude);
     }
     else
     {
          // propvar either is VT_EMPTY, or contains something other than a vector of  doubles
     }
     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

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

InitPropVariantFromDoubleVector

PropVariantGetDoubleElem

PropVariantToDouble

PropVariantToDoubleVector

VariantToDoubleArray