我在WMI / WBEM接口上调用返回HRESULTS的方法。我想向用户显示这些错误代码的有意义的错误消息。但是,当我查看HRESULT的错误消息时,我只会收到类似“IDispatch错误#3598”的字符串。
我是否可以找到解释其含义的IDispatch错误代码列表?
可能发生错误的示例代码:
IWbemLocator *pLocator = NULL;
IWbemServices *pNamespace = NULL;
hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLocator);
if (FAILED(hr))
return hr;
hr = pLocator->ConnectServer(wPath, NULL, NULL, NULL, 0, NULL, NULL, &pNamespace);
if(FAILED(hr))
return hr;
错误查找:
CString sMessage = _com_error(nError).ErrorMessage();
// sMessage now contains a string like "IDispatch error #3598"
注意:This没有帮助 - 它不包含我得到的HRESULTS。它们都不包含在winerror.h中。
答案 0 :(得分:6)
COM服务器可以生成自己的HRESULT错误代码。 IErrorInfo接口可帮助客户端获取错误的描述。你没有给_com_error类一个机会做这个工作,你没有将IErrorInfo接口指针传递给构造函数。
首先,QI是ISupportErrorInfo的接口,并调用其InterfaceSupportsErrorInfo()方法来验证是否支持错误报告。接下来调用GetErrorInfo()来获取IErrorInfo接口指针。 MSDN docs are here。