Я пытаюсь использовать ExecQuery () из http://msdn.microsoft.com/en-us/library/aa392107%28v=vs.85%29.aspx в программе, но у меня проблемы с ошибками. В частности, если WQL-запрос хорош, то все работает. Результаты хорошие, я могу с ними работать. Если, однако, запрос плохо, как
"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPENab8f"
HRESULT, возвращенный из ExecQuery, все еще успешен. Однако доступ к перечислителю приведет к сбою программы. В документации указано, что существуют возвращаемые значения, которые указывают на разные ошибки. Следующие не ловят это:
IEnumWbemClassObject * wmienumerator = NULL;
//
HRESULT hres;
hres = pWMI->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_Networkiguration WHERE IntderfaceIndex=4"),
WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY,
NULL,
&wmienumerator);
if(hres != WBEM_S_NO_ERROR)
{
cerr << "error";
exit(1);
}
else if(hres != 0)
{
cerr << "error";
exit(1);
}
else if(hres == WBEM_E_FAILED)
{
cerr << "error";
exit(1);
}
else if(FAILED(hres))
{
cerr << "error";
exit(1);
}
Я пробовал много других операторов If, проверяя различные значения, а также проверяя, по-прежнему ли указатель перечислителя равен NULL (это не так).
На данный момент мне интересно, если это является действительный запрос, и возвращаемые результаты просто пусты. Я не знаю, как проверить, так ли это …
Я чувствую, что упускаю что-то, что очевидно для опытного программиста, я только что из моего начального класса C ++ …
Задача ещё не решена.