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

时间:2013-01-12 08:16:31

标签: c++ visual-studio-2010 com mfc atl

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

我用Google搜索了很多次,但没有发现任何相关内容。我认为在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);

任何人都可以帮助我?

2 个答案:

答案 0 :(得分:1)

错误代码完全是功能特定的。想想那些[{1}}的代码片段可以从中获得哪些额外的细节?机会很高,你根本就没有细节。

有时您可以使用GetErrorInfo API获取其他信息,在您的情况下 - 考虑到您的代码段 - 不太可能。

您可以做的最好的事情就是尽可能接近代码的来源,以便了解它的来源。

答案 1 :(得分:0)

使用_com_error课程。 通过传入HRESULT值构建此类的对象,然后使用其WCodeErrorMessage方法将错误代码映射到HRESULT值。