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そのWCodeまたはErrorMessageメソッドを使用して、値にマップされたエラー コードを取得しHRESULTます。

于 2013-01-12T10:41:33.477 に答える
1

エラー コードは完全に機能固有です。[反対側の] コードの一部を考えてみてくださいreturn E_FAIL;。そこから得られる追加の詳細は何ですか? 詳細がまったくない可能性が高いです。

場合によっては、API を使用して追加情報を取得できますがGetErrorInfo、コード スニペットを念頭に置いている場合はそうではありません。

あなたができる最善の方法は、コードがどこから来たのかを知るために、コードの出所にできるだけ近づくように踏み込むことです.

于 2013-01-12T12:02:03.550 に答える