【问题标题】:WMI strange valuesWMI 奇怪的值
【发布时间】:2017-04-29 18:20:01
【问题描述】:

我想检测WMI 中的RAM 制造商。我得到奇怪符号而不是实际数据的问题。我也使用wmic 命令检查了它。截图如下。

截图:

我尝试了不同的方法在输出前检查值,但问题仍然存在。

代码:

VARIANT ramManufacturer;
pclsObj->Get(L"Manufacturer", 0, &ramManufacturer, 0, 0);
QString userRAMManufacturer;
QStringList ramProperty;
QStringList ramData;

   if (SysStringLen(ramManufacturer.bstrVal) != 0) {
       userRAMManufacturer = QString::fromWCharArray(ramManufacturer.bstrVal);

        if (!userRAMManufacturer.isEmpty()) {
            ramProperty << QObject::tr("Manufacturer");
            ramData << userRAMManufacturer;
        }
    }

或者

if (CComBSTR(ramManufacturer.bstrVal).Length() != 0) {
    userRAMManufacturer = QString::fromWCharArray(ramManufacturer.bstrVal);

    if (!userRAMManufacturer.isEmpty()) {
        ramProperty << QObject::tr("Manufacturer");
        ramData << userRAMManufacturer;
    }
}

如何解决这个问题?提前致谢。

【问题讨论】:

  • 对于初学者来说,您没有检查来自Get 调用的返回值以查看它是否真的成功。所以你的 VARIANT ramManufacturer 变量用垃圾初始化。您也没有检查 Get 返回的 VARIANT 的 vt 成员,以查看它是否实际上是 VT_BSTR 而不是 ascii 字符串或其他内容。
  • @selbie 好的。我会查一下。感谢您的回复。

标签: c++ windows wmi ram


【解决方案1】:

@selbie

谢谢。我检查了Get 的值,现在这些值是正确的。

代码:

if (ramManufacturer.vt != VT_NULL && ramManufacturer.vt == VT_BSTR) {
    userRAMManufacturer = QString::fromWCharArray(ramManufacturer.bstrVal);
    ramProperty << QObject::tr("Manufacturer");
    ramData << userRAMManufacturer;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多