Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
操作数类型不兼容";BSTR";及;常量字符*”; 你好,我使用Visual Studio C++ 2010,IM仍然不太擅长。我使用WMI查询,我想在声明结果之前使用if语句,这里是代码< /p> 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(); IEnumWbemClassObject*pEnumerator=NULL; hres=pSvc->ExecQuery( bstr_t(“WQL”), bstr_t(“从Win32_计算机系统中选择*), WBEM_FLAG_仅前进| WBEM_FLAG_立即返回|, 无效的 &喷鼻器); 如果(失败(hres)) { cout_C++_Visual C++_Wmi Query_Operands - Fatal编程技术网 ExecQuery( bstr_t(“WQL”), bstr_t(“从Win32_计算机系统中选择*), WBEM_FLAG_仅前进| WBEM_FLAG_立即返回|, 无效的 &喷鼻器); 如果(失败(hres)) { cout,c++,visual-c++,wmi-query,operands,C++,Visual C++,Wmi Query,Operands" /> ExecQuery( bstr_t(“WQL”), bstr_t(“从Win32_计算机系统中选择*), WBEM_FLAG_仅前进| WBEM_FLAG_立即返回|, 无效的 &喷鼻器); 如果(失败(hres)) { cout,c++,visual-c++,wmi-query,operands,C++,Visual C++,Wmi Query,Operands" />

操作数类型不兼容";BSTR";及;常量字符*”; 你好,我使用Visual Studio C++ 2010,IM仍然不太擅长。我使用WMI查询,我想在声明结果之前使用if语句,这里是代码< /p> 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(); IEnumWbemClassObject*pEnumerator=NULL; hres=pSvc->ExecQuery( bstr_t(“WQL”), bstr_t(“从Win32_计算机系统中选择*), WBEM_FLAG_仅前进| WBEM_FLAG_立即返回|, 无效的 &喷鼻器); 如果(失败(hres)) { cout

操作数类型不兼容";BSTR";及;常量字符*”; 你好,我使用Visual Studio C++ 2010,IM仍然不太擅长。我使用WMI查询,我想在声明结果之前使用if语句,这里是代码< /p> 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(); IEnumWbemClassObject*pEnumerator=NULL; hres=pSvc->ExecQuery( bstr_t(“WQL”), bstr_t(“从Win32_计算机系统中选择*), WBEM_FLAG_仅前进| WBEM_FLAG_立即返回|, 无效的 &喷鼻器); 如果(失败(hres)) { cout,c++,visual-c++,wmi-query,operands,C++,Visual C++,Wmi Query,Operands,这里至少有两个问题: BSTR看起来像一个字符串,但并不完全像一个C字符串。请阅读更多内容。因此,您必须小心区别 即使vtProp.bstrVal是C字符串,您的比较也不会起作用,因为vtProp.bstrVal==“test”将比较指针的地址而不是字符串的内容 对于简单的比较,就像在代码中一样,解决方案是用 wcscmp(vtProp.bstrVal, L"test")==0 为什么不使用宽字符串,例如write\u bstr\u t(L“WQL”)。他们使用wchar\u t而不是ch

这里至少有两个问题:

  • BSTR看起来像一个字符串,但并不完全像一个C字符串。请阅读更多内容。因此,您必须小心区别

  • 即使vtProp.bstrVal是C字符串,您的比较也不会起作用,因为
    vtProp.bstrVal==“test”
    将比较指针的地址而不是字符串的内容

对于简单的比较,就像在代码中一样,解决方案是用

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

为什么不使用宽字符串,例如write
\u bstr\u t(L“WQL”)
。他们使用
wchar\u t
而不是
char
。在codeproject.com上有许多关于BSTR、\u BSTR\u t、CComBSTR、char*、wchar\u t*、std::string等的优秀文章。如果您稍微使用BSTR,这些文章值得一读。您不应该忘记一些问题。提到您的代码从这里复制了nippet:我说得对吗?谢谢!是的,你完全正确!再次感谢!!还有一件事,如果我想说,比如“如果结果包含单词“test”,而不仅仅是“test”作为一个整体结果,那么//do stuff“你可以尝试
wcsstr(vtProp.bstrVal,L“test”)!=0
:wcsstr()的结果当第二个字符串包含在第一个字符串中时,不为null。