我正在尝试在程序中使用http://msdn.microsoft.com/en-us/library/aa392107%28v=vs.85%29.aspx中的 ExecQuery(),但我遇到了错误问题。具体来说,如果 WQL 查询良好,那么一切正常。结果很好,我可以和他们一起工作。但是,如果查询很糟糕,例如
"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPENab8f"
从 ExecQuery 返回的 HRESULT 仍然是成功的。但是访问枚举器会使程序崩溃。该文档表明存在指示不同错误的返回值。以下没有抓住它:
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++ 课程中出来......