0

我正在尝试在程序中使用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++ 课程中出来......

4

0 回答 0