C++ Получение данных массива WMI с локального компьютера

Я столкнулся с проблемой извлечения данных массива из класса WMI с использованием С++.

По следующей ссылке http://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx, на шаге 7 примера показано, как получить строковое значение выполненного запроса wmi. Однако в настоящее время я сталкиваюсь с проблемой, когда значение, возвращаемое из запроса, представляет собой массив uint16.

например.
Запрос: "Выберите ChassisTypes из Win32_SystemEnclosure"


Результат:
_РОД : 2
_CLASS : Win32_SystemEnclosure
_СУПЕРКЛАСС:
_DYNASTY:
_ RELPATH:
_PROPERTY_COUNT: 1
_ПРОИЗВОДСТВО: {}
_SERVER:
_NAMESPACE:
_PATH:
Типы шасси: {3}

Могу ли я спросить, как мне на самом деле обработать результат, чтобы получить целочисленное значение ChassisType из массива в этом случае? Спасибо!


person Brumble    schedule 20.03.2014    source источник


Ответы (1)


Чтобы получить доступ к значениям массива из свойства WMI, вы можете использовать SafeArrayGetElement, SafeArrayGetLBound и SafeArrayGetUBound.

Попробуйте этот образец

VARIANT vtProp;
hr = pclsObj->Get(L"ChassisTypes", 0, &vtProp, 0, 0);// Uint16
if (!FAILED(hr))
{
    if ((vtProp.vt==VT_NULL) || (vtProp.vt==VT_EMPTY))
        wcout << "ChassisTypes : " << ((vtProp.vt==VT_NULL) ? "NULL" : "EMPTY") << endl;
    else
        if ((vtProp.vt & VT_ARRAY))
        {
            wcout << "ChassisTypes : "  << endl;
            long lLower, lUpper; 
            UINT32 Element = NULL;
            SAFEARRAY *pSafeArray = vtProp.parray; 
            SafeArrayGetLBound(pSafeArray, 1, &lLower);
            SafeArrayGetUBound(pSafeArray, 1, &lUpper);

            for (long i = lLower; i <= lUpper; i++) 
            {
                hres = SafeArrayGetElement(pSafeArray, &i, &Element);
                wcout << Element<< endl;
            }

            SafeArrayDestroy(pSafeArray);                 
        }
        VariantClear(&vtProp);
        pclsObj->Release();
        pclsObj=NULL;
}
person RRUZ    schedule 20.03.2014
comment
Спасибо РРУЗ! Теперь мне нужно найти, как правильно преобразовать этот элемент переменной interger без знака в строку. - person Brumble; 24.03.2014