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


Получение типов векторов

Некоторые свойства и поля данных содержат массивы сведений. Например, свойство SENSOR_PROPERTY_LIGHT_RESPONSE_CURVE содержит массив 4-байтовых целых чисел без знака. Однако при получении таких массивов через API датчика они всегда представлены как тип VT_VECTOR| UI1— массив однобайтовых символов, независимо от фактического типа данных в массиве. Для этих типов необходимо соблюдать осторожность, чтобы привести переменные массива к правильному типу данных для свойства или поля данных.

Сведения о свойствах, полях данных и их типах см. в разделе Константы.

В следующем примере кода показано, как привести данные, полученные в SENSOR_PROPERTY_LIGHT_RESPONSE_CURVE, к правильному типу.

PROPVARIANT pvCurve;
PropVariantInit(&pvCurve);

// Retrieve the property value.
hr = pSensor->GetProperty(SENSOR_PROPERTY_LIGHT_RESPONSE_CURVE, &pvCurve);
if (SUCCEEDED(hr))
{
    if ((VT_UI1|VT_VECTOR) == V_VT(pvCurve)) // Note actual type of UI1
    {
        // Cast the array to UINT, a 4-byte unsigned integer.

        // Item count for the array.
        UINT  cElement = pvCurve.caub.cElems/sizeof(UINT);
        // Array pointer.
        UINT* pElement = (UINT*)(pvCurve.caub.pElems);

        // Use the array.
    }
}

// Remember to free the PROPVARIANT when done.
PropVariantClear(&pvCurve);