当我在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
值来构造该类的对象,然后使用其WCode
或ErrorMessage
方法来获取映射到HRESULT
值的错误代码。