当我在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);
任何人都可以帮助我?
答案 0 :(得分:1)
错误代码完全是功能特定的。想想那些[{1}}的代码片段可以从中获得哪些额外的细节?机会很高,你根本就没有细节。
有时您可以使用GetErrorInfo
API获取其他信息,在您的情况下 - 考虑到您的代码段 - 不太可能。
您可以做的最好的事情就是尽可能接近代码的来源,以便了解它的来源。
答案 1 :(得分:0)
使用_com_error
课程。
通过传入HRESULT
值构建此类的对象,然后使用其WCode
或ErrorMessage
方法将错误代码映射到HRESULT
值。