在Visual c++的WMI中读取int数组属性

Reading uint Array properties inside WMI in Visual C++

本文关键字:读取 int 数组 属性 WMI Visual c++      更新时间:2023-10-16

我从WMI对象中读取int数组属性有困难。我可以从WMI对象中读取和处理STRING属性。

这是我尝试过的:

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

这就是获取安全数组第一个元素的方法。

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