我无法从WMI对象中读取uint ARRAYS属性。我可以从WMI对象中读取和处理STRING属性。
这就是我的尝试:
VARIANT vtProp;
hr = pclsObj->Get(L"VendorSpecific", 0, &vtProp, 0, 0);// Uint8
答案 0 :(得分:1)
这是你获得安全数组的第一个元素的方法。
SAFEARRAY* safearray = vtProp.parray;
CComBSTR str;
LONG i = 0;
SafeArrayGetElement(safearray, &i, &str);
更新:更通用的解决方案:
SAFEARRAY* safearray = vtProp.parray;
VARTYPE vType;
SafeArrayGetVartype(safearray, &vType);
long bound = safearray ->rgsabound[0].cElements;
for(long i = 0; i < bound; ++i)
{
VARIANT value;
SafeArrayGetElement(safearray, &i, &value);
switch(vType)
{
case VT_BSTR:
// use value.bstrVal
break;
case VT_UI8:
// use value.ullVal
break;
}
}
答案 1 :(得分:0)
VARIANT vtProp;
hr = pclsObj->Get(L"VendorSpecific", 0, &vtProp, 0, 0);// Uint8
long lUpper = 0;
long lLower = 0;
hr = SafeArrayGetUBound(V_ARRAY(&vtProp),1,&lUpper);
hr = SafeArrayGetLBound(V_ARRAY(&vtProp),1,&lLower);
long lNumOfElems = lUpper-lLower+5;
BYTE HUGEP *plongArray;
BYTE b;
hr=SafeArrayAccessData(V_ARRAY(&vtProp), (void**)&plongArray);
b = plongArray[0];