0

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

我用谷歌搜索了很多次,但没有发现任何相关内容。try{} catch{}我认为在 ATL 中应该有类似的东西。

这是一些示例代码:

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);

任何人都可以帮助我吗?

4

2 回答 2

1

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

于 2013-01-12T10:41:33.477 回答
1

错误代码完全是特定于功能的。想想[另一方面]的一段代码,return E_FAIL;它可以从中获得哪些额外的细节?很有可能你根本没有细节。

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

你能做的最好的事情就是走进去尽可能接近代码的源头,以便知道它来自哪里。

于 2013-01-12T12:02:03.550 回答