Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从E_FAIL获取详细错误信息?_C++_Visual Studio 2010_Com_Mfc_Atl - Fatal编程技术网

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

C++ 如何从E_FAIL获取详细错误信息?,c++,visual-studio-2010,com,mfc,atl,C++,Visual Studio 2010,Com,Mfc,Atl,当我在MFC应用程序中使用ATL时(不要问我为什么,只是因为我喜欢),有时我会得到错误代码:E\u FAIL。然而,对于我来说,找到具体的原因几乎是无用的 我在谷歌上搜索了很多次,但没有发现任何相关信息。我认为ATL中应该有类似于try{}catch{}的东西 下面是一些示例代码: CAxWindow m_wndView; // ActiveX host window class. CComPtr<IWMPPlayer> m_spWMPPlayer; // Smart poi

当我在MFC应用程序中使用ATL时(不要问我为什么,只是因为我喜欢),有时我会得到错误代码:E\u 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);
caxwindowm\u wndView;//ActiveX主机窗口类。
CComPtr m_spWMPPlayer;//指向iwmplayer接口的智能指针。
AtlAxWinInit();
斯波斯特伯爵;
HRESULT-hr;
正确的客户;
GetClientRect(&rcClient);
创建(m_hWnd,rcClient,NULL,WS_CHILD | WS|u VISIBLE | WS|u CLIPCHILDREN,WS_exclientedge);
//当我从动态链接切换到ATL的静态链接时,我总是发现E_失败
hr=m_wndView.QueryHost(&spHost);

有人能帮我吗?

使用
\u com\u error
类。
通过传入
HRESULT
值来构造此类的对象,然后使用其
WCode
ErrorMessage
方法来获取映射到
HRESULT
值的错误代码。

错误代码完全是特定于函数的。想想[另一边]的一段代码,
返回E_FAIL可以从中获得哪些其他详细信息?很有可能你一点细节都没有

有时,您可以使用API获得额外的信息,在您的情况下,记住代码片段是不可能的


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

我已经更新了帖子,请检查并给出你的建议。好吧,我不确定,但是
CWindow::Create
参考
CreateWindow
在备注部分,而
CreateWindow
通过
GetLastError
提供额外的错误信息。不过,我不知道这是否意味着
CWindow::Create
也会这样做。不过,我找不到任何接受您传递的参数的,只是
CAxWindow
来自
CWindow
。谢谢您的回复。我已经按照你说的做了,但是我只收到了错误信息:未指定的错误。这是我的代码:_com_error err(hr);auto d=err.WCode();自动s=错误描述();自动消息=err.ErrorMessage()//除非使用_com_error(HRESULT、IErrorInfo、bool)构造函数,否则将永远无法改善的未指定错误。QI让ISupportErrorInfo首先检查它是否可用,然后调用GetErrorInfo(),您确实解决了我的问题。我一行一行地调试代码,发现如果定义了宏ATL DLL,所有代码都能正常工作。非常感谢你的推荐。