您好我使用Visual Studio C ++ 2010和即时通讯仍然不是那么擅长。我正在使用WMI查询,我想使用if语句之前我在这里cout结果是代码
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看起来像一个字符串,但不完全像一个C字符串。阅读更多here。因此,您必须小心区别。
即使vtProp.bstrVal是C字符串,您的比较也不起作用,因为vtProp.bstrVal == "test"
会比较指针的地址而不是字符串的内容。
为了进行简单的比较,例如在您的代码中,解决方案是将测试替换为
wcscmp(vtProp.bstrVal, L"test")==0