1

私は Windows 8 アプリ (C++) に取り組んでいます。Windows 8 サンプル コレクションの httpclient クラスを使用しました。

inline void CheckHResult(HRESULT hResult)
{
    if (hResult == E_ABORT)
    {
        concurrency::cancel_current_task();
    }
    else if (FAILED(hResult))
    {
        throw Platform::Exception::CreateException(hResult);
    }
}

アプリがインターネットに接続されていない場合、この関数は例外をスローします。このように、次のラムダで例外をキャッチしようとしています。

return completionTask.then([this, stringCallback](tuple<HRESULT, wstring> resultTuple)
{
    try
    {
        CheckHResult(std::get<0>(resultTuple));
    }

    catch(Exception^ ex)
    {

    }

    return std::get<1>(resultTuple);
}); 

しかし、まだ未処理の例外が表示されています:

First-chance exception at 0x77194B32 in Sample.exe: Microsoft C++ exception: Platform::COMException ^ at memory location 0x08C7EDF4. HRESULT:0x800C0005
If there is a handler for this exception, the program may be safely continued.

私が間違っていることはありますか?

4

1 に答える 1

2

初回例外は必ずしもコードの問題を示しているわけではなく、キャッチされていない例外と同じではありません

この (古めかしいが、それでも正しい) 記事では、最初の例外が実際に何であるかを説明しています。後でキャッチされるかどうかに関係なく、例外がスローされたことをデバッガーに通知するだけです。

アプリケーションのデバッグ中は、例外が発生するたびにデバッガーに通知されます。この時点で、アプリケーションは中断され、デバッガーは例外の処理方法を決定します。このメカニズムを最初に通過することは、「最初のチャンス」例外と呼ばれます。デバッガーの構成に応じて、アプリケーションを再開して例外を渡すか、アプリケーションを中断したままにしてデバッグ モードに入ります。アプリケーションが例外を処理する場合、アプリケーションは引き続き正常に実行されます。

于 2013-04-07T07:17:29.710 に答える