3

我在使用 C++ 从 WMI 类中检索数组数据时遇到问题。

在以下链接http://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx中,示例的第 7 步向我们展示了如何检索运行的 wmi 查询的字符串值. 但是,当查询返回的值是 uint16 数组时,我目前面临一个问题。

例如。
查询:“从 Win32_SystemEnclosure 中选择机箱类型”


结果:
_ GENUS :2
_CLASS:
Win32_SystemEnclosure_SUPERCLASS
_DYNASTY:
_ RELPATH:
_PROPERTY_COUNT:1
_ DERIVATION:{}
_SERVER:
_ NAMESPACE:
_PATH:ChassisTypes
:{3}

请问在这种情况下,我如何实际处理结果以从数组中检索 ChassisType 的整数值?谢谢!

4

1 回答 1

5

要从 WMI 属性访问数组值,您可以使用SafeArrayGetElementSafeArrayGetLBoundSafeArrayGetUBound方法

试试这个样本

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;
}
于 2014-03-20T17:59:22.037 回答