Здравствуйте, я использую Visual Studio C ++ 2010, и я все еще не так хорош в этом. Я использую запрос wmi, и я хочу использовать оператор if, прежде чем я coutout результат здесь код
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. Прочитайте больше Вот. Поэтому вы должны быть осторожны с разницей.
даже если vtProp.bstrVal будет строкой C, ваше сравнение не будет работать, потому что vtProp.bstrVal == "test"
сравнил бы адрес указателей, а не содержимое строк.
Для простого сравнения, как в вашем коде, решение будет заменить ваш тест на
wcscmp(vtProp.bstrVal, L"test")==0