【问题标题】:operand types are incompatible "BSTR" and "const char*"操作数类型不兼容“BSTR”和“const char*”
【发布时间】:2014-07-04 19:00:29
【问题描述】:

您好,我正在使用 Visual Studio C++ 2010,但我仍然不擅长它。我正在使用 wmi 查询,我想在计算结果之前使用 if 语句这里是代码

IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
    bstr_t("WQL"), 
    bstr_t("SELECT * FROM Win32_ComputerSystem"),
    WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
    NULL,
    &pEnumerator);

if (FAILED(hres))
{
    cout << "Query for CS failed."
        << " Error code = 0x" 
        << hex << hres << endl;
    pSvc->Release();
    pLoc->Release();
    CoUninitialize();
    return 1;               // Program has failed.
}


// Get the data from the query 

IWbemClassObject *pclsObj;
ULONG uReturn = 0;

while (pEnumerator)
{
    HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
        &pclsObj, &uReturn);

    if(0 == uReturn)
    {
        break;
    }

    VARIANT vtProp;


    // Get the value of the Name property
    hr = pclsObj->Get(L"Manufacturer", 0, &vtProp, 0, 0);


    if (vtProp.bstrVal == "test")  //// HERE IS THE PROB HOW TO FIX HERE?I WANT TO SAY IF THE RESULT ="WHATEVER" THEN 

    wcout << "\Manufacturer : " << vtProp.bstrVal << endl; // or do stuff 

    VariantClear(&vtProp);

    pclsObj->Release();

错误是:错误 C2446:'==':没有从 'const char *' 到 'BSTR' 的转换 我还是一个初学者,我不知道如何解决这个问题,请帮助!!!

【问题讨论】:

  • 为什么不使用宽字符串,例如写_bstr_t( L"WQL" )。他们使用wchar_t 而不是char
  • codeproject.com 上有很多关于 BSTR、_bstr_t、CComBSTR、char*、wchar_t*、std::string 等的精彩文章。如果您将使用 BSTR,它们值得一读公平一点。有一些你不应该忘记的陷阱。
  • 提及您的代码 sn-p 已从此处复制可能会有所帮助:msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx 我正确吗?

标签: c++ visual-c++ wmi-query operands


【解决方案1】:

这里至少有两个问题:

  • BSTR 看起来像一个字符串,但不完全是一个 C 字符串。阅读更多here。所以你必须小心区别。

  • 即使 vtProp.bstrVal 是一个 C 字符串,你的比较也不起作用,因为vtProp.bstrVal == "test" 会比较指针的地址而不是字符串的内容。

为了进行简单的比较,例如在您的代码中,解决方案是将您的测试替换为

wcscmp(vtProp.bstrVal, L"test")==0

【讨论】:

  • 谢谢!是的,你完全正确!再次感谢 !!另一件事如果我想说的任何想法例如“如果结果包含单词“test”,而不仅仅是“test”作为一个整体结果然后//做一些事情”
  • 你可以试试wcsstr(vtProp.bstrVal, L"test")!=0:当第二个字符串包含在第一个字符串中时,wcsstr() 的结果不为空。
猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
相关资源
最近更新 更多