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

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

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

например.

Запрос: «Выберите ChassisTypes из Win32_SystemEnclosure»

Результат:

_GENUS: 2

_CLASS: Win32_SystemEnclosure

_суперкласс:

_DYNASTY:

_RELPATH:

_PROPERTY_COUNT: 1

_ПРОИЗВОДСТВО: {}

_SERVER:

_NAMESPACE:

_ДОРОЖКА:

Типы шасси: {3}

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

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;
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]