如何从E_FAIL获取详细的错误信息

How to get detail error info from E_FAIL?

本文关键字:错误 信息 获取 FAIL      更新时间:2023-10-16

当我在MFC应用程序中使用ATL时(不要问我为什么,只是因为我喜欢),有时我会得到错误代码:E_FAIL。但是,我几乎找不到具体的原因。

我已经谷歌了很多次,但没有找到任何相关的。我觉得ATL里应该有try{} catch{}之类的东西

下面是一些示例代码:

CAxWindow  m_wndView;  // ActiveX host window class.
CComPtr<IWMPPlayer>  m_spWMPPlayer;  // Smart pointer to IWMPPlayer interface.
AtlAxWinInit();
CComPtr<IAxWinHostWindow>  spHost;
HRESULT  hr;
CRect rcClient;
GetClientRect(&rcClient);
m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
//when I switch to Static Link to ATL from Dynamic Link to ATL, I always get E_FAIL
hr = m_wndView.QueryHost(&spHost);

有人能帮我吗?

错误代码完全是特定于函数的。想想(另一边的)一段代码,它做了return E_FAIL;,我们可以从中得到什么额外的细节?很有可能你根本就没有细节。

有时你可以使用GetErrorInfo API获得额外的信息,在你的情况下-记住你的代码片段-不太可能。

你能做的最好的事情就是深入到里面,尽可能接近代码的起源,以便判断它来自哪里。

使用_com_error类。通过传入HRESULT值来构造该类的对象,然后使用其WCodeErrorMessage方法来获取映射到HRESULT值的错误代码。