IDispatch错误和/或消息文本列表

时间:2011-02-05 17:37:24

标签: c++ com idispatch

我在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中。

1 个答案:

答案 0 :(得分:6)

COM服务器可以生成自己的HRESULT错误代码。 IErrorInfo接口可帮助客户端获取错误的描述。你没有给_com_error类一个机会做这个工作,你没有将IErrorInfo接口指针传递给构造函数。

首先,QI是ISupportErrorInfo的接口,并调用其InterfaceSupportsErrorInfo()方法来验证是否支持错误报告。接下来调用GetErrorInfo()来获取IErrorInfo接口指针。 MSDN docs are here