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

C++ IDispatch错误和/或消息文本列表,c++,com,idispatch,C++,Com,Idispatch,我在WMI/WBEM接口上调用返回HRESULT的方法。我想向用户显示这些错误代码的有意义的错误消息。但是,当我查找HRESULT的错误消息时,只会得到类似“IDispatch error 3598”的字符串 我可以找到这些IDispatch错误代码的列表来解释它们的含义吗? 可能发生错误的示例代码: IWbemLocator *pLocator = NULL; IWbemServices *pNamespace = NULL; hr = CoCreateInstance(CLSID_WbemL

我在WMI/WBEM接口上调用返回HRESULT的方法。我想向用户显示这些错误代码的有意义的错误消息。但是,当我查找HRESULT的错误消息时,只会得到类似“IDispatch error 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"

注意:没有帮助-它不包含我得到的HRESULT。它们也不包含在winerror.h中。

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


首先检查ISupportErrorInfo的接口并调用其InterfaceSupportsErrorInfo()方法以验证是否支持错误报告。下一步调用GetErrorInfo()以获取IErrorInfo接口指针。MSDN docs.

谢谢你,汉斯,这听起来很合理-但是,我尝试了以下方法,但由于QueryInterface调用,只得到了E_NOINTERFACE:hr=pLocator->ConnectServer(wPath,NULL,NULL,NULL,0,NULL,NULL,&pNamespace);if(FAILED(hr)){HRESULT result=pLocator->QueryInterface(IID_IErrorInfo,(void**)&pErrorInfo);if(successed(result)&pErrorInfo!=NULL)CString sMessage=_com_error(hr,pErrorInfo).ErrorMessage();再次感谢。它看起来像“我的”界面(IWbemLocator)不支持ISupportErrorInfo。但由于您的答案看起来非常正确,我会将其标记为正确。以下是我尝试的仅返回E_NOINTERFACE:pLocator->QueryInterface(IID_ISupportErrorInfo,(void**)和pSupportErrorInfo)的内容;