Типы операндов несовместимы «BSTR». и & quot; const char * & quot;

Здравствуйте, я использую 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’
Я все еще начинающий, и я не знаю, как решить эту проблему, пожалуйста, помогите !!!

0

Решение

Здесь есть как минимум два вопроса:

  • BSTR выглядит как строка, но не совсем как строка C. Прочитайте больше Вот. Поэтому вы должны быть осторожны с разницей.

  • даже если vtProp.bstrVal будет строкой C, ваше сравнение не будет работать, потому что vtProp.bstrVal == "test" сравнил бы адрес указателей, а не содержимое строк.

Для простого сравнения, как в вашем коде, решение будет заменить ваш тест на

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

Другие решения


По вопросам рекламы [email protected]