2013-04-07 3 views
1

저는 Windows 8 앱 (C++)을 작업하고 있습니다. Windows 8 샘플 컬렉션의 httpclient 클래스를 사용했습니다.예외를 잡는 방법 [C++/CX]

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

이 함수는 앱이 인터넷에 연결되어 있지 않을 때 예외를 throw합니다. 나는 이런 람다에서 예외를 잡으려고 노력하고있다.

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. 

내가 잘못하고있는 중이 있나요를?

답변

2

첫 번째 예외가 반드시 코드에 문제가 있음을 나타내지는 않으며 캐치되지 않은 예외와 다른 이 아닌 것.

This (oldish, but still correct) article은 첫 번째 예외가 실제로 무엇인지 설명합니다. 디버거에 예외가 발생했다는 알림 (나중에 catch되는지 여부)을 설명합니다.

응용 프로그램을 디버깅 할 때 예외가 발생할 때마다 디버거가 알림을받습니다.이 시점에서 응용 프로그램이 일시 중단되고 디버거가 예외 처리 방법을 결정합니다. 이 메커니즘을 통한 첫 번째 통과를 "첫 번째 기회"예외라고합니다. 디버거의 구성에 따라 응용 프로그램을 다시 시작하고 예외를 전달하거나 응용 프로그램을 일시 중단 한 상태로 디버그 모드로 전환합니다. 응용 프로그램에서 예외를 처리하면 정상적으로 계속 실행됩니다.

+0

도움을 주셔서 감사합니다. 너 같은 지식있는 사람들에게서 배우는 것이 좋다. :) –