WMI返回类型转换

吉米·D

我正在为Open Hardware Monitor制作插件。但是我在使用Windows wmi数据库时遇到问题。我可以运行查询,并从中获取值。但是我无法将值转换为正确的类型。因为我在运行时创建查询,所以我不知道WMI数据库必须返回哪种类型才能正确运行。就我而言,我可以得到一个浮点数或一个字符串。但是,当我从数据库中获取一个浮点数并将其转换为字符串时,出现了内存错误。而且,如果我将字符串转换为浮点数,则不会出现任何错误。现在如何创建BSTR值无效的检查?或者如何检查我必须使用哪种类型?我已经用一些陈述或尝试抓住了它进行了测试。但是他们都不在工作。

try
{
    wstring ws(vtProp.bstrVal, SysStringLen(vtProp.bstrVal));
    returnValue = string(ws.begin(), ws.end());
    ws.clear();
}
catch (...)
{
    float temp = vtProp.fltVal;
    returnValue = to_string(temp);
}
鲁鲁兹

您可以type of the WMI property使用IWbemClassObject::Get方法检索然后使用VARIANT变量的正确字段访问值。

试试这个样本

VARIANT vtProp;
CIMTYPE pType;

//here put the real property Name
hr = pclsObj->Get(L"PropertyName", 0, &vtProp, &pType, 0);
if (!FAILED(hr))
{
 //check if the property is a string 
 if (pType == CIM_STRING && pType != CIM_EMPTY && pType!= CIM_ILLEGAL)
 {
      wcout << "Value : " << vtProp.bstrVal << endl;
 }
 else
 //check if the property is a float
 if (pType == CIM_REAL32 && pType != CIM_EMPTY && pType!= CIM_ILLEGAL)
 {
      wcout << "Value : " << vtProp.fltVal << endl;
 }

}
VariantClear(&vtProp);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MethodHandle 强制转换返回类型

返回错误的类型-强制转换?

WCF自动转换返回类型?

协变返回类型和类型转换

将Python返回的类型转换为C ++

对象转换中的通用返回类型

基于返回类型的Java泛型转换?

将对象转换为通用类型以返回

基于类字段的转换函数返回类型

Azure Function返回对象类型转换

C#方法通用返回类型转换

错误无法转换返回类型 uiviewcontroller

基于返回类型的转换和过载扣除

用户定义的转换无法指定返回类型

返回值的隐式类型转换

在python中将返回类型转换为对象

如何根据参数类型转换函数的返回类型?

如何使用Redux类型将返回类型转换为void?

无法将表达式类型转换为返回类型

在 TypeScript 中将函数类型转换为这些函数的返回类型

如何将MessageResponse类型转换为ResponseEntity <?>返回类型

将类型强制转换为模板返回类型

TypeScript 中的类型转换和条件返回类型

强制转换返回强制类型的函数的返回值

无法在 swift 中将“()”类型的返回表达式转换为“String”类型的返回类型

Swift Closures:无法将“()”类型的返回表达式转换为“LiveSearchResponse”类型的返回类型?

如何理解最终覆盖器返回的类型被隐式转换为被调用的覆盖函数的返回类型?

无法将类型'CustomProfileCell'的返回表达式转换为返回类型'UITableViewCell'

无法将类型“[Favorite.Type]”的返回表达式转换为返回类型“[Favorite]”