在Visual C ++中读取WMI内部的uint数组属性

时间:2014-03-25 13:51:44

标签: c++ windows visual-studio wmi

我无法从WMI对象中读取uint ARRAYS属性。我可以从WMI对象中读取和处理STRING属性。

这就是我的尝试:

VARIANT vtProp; 
hr = pclsObj->Get(L"VendorSpecific", 0, &vtProp, 0, 0);// Uint8

2 个答案:

答案 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];