MFC 응용 프로그램에서 최상위 try/catch 위치는 어디입니까?MFC 애플리케이션에서 어디에서 최상위 try/catch를 넣을까요?
난 MFC 응용 프로그램이 있고 모든 예외를 잡아 내 자신의 메시지 상자를 표시하고 싶습니다. 나는 블록을 넣을 수 있습니다
try
{
// What enclose here? Or, where to put this try/catch block?
}
catch(const std::exception& e)
{
::MessageBox(0,e.what(),"I do not know hot to handle this exception, I will terminate",MB_OK);
}
catch(...)
{
::MessageBox(0,"Unknown Excpetion","I do not know hot to handle this exception, I will terminate",MB_OK);
}
::TerminateProcess(::GetCurrentProcess(), -1);
하지만, :
이 내 최상층 try/catch 블록에 대한 생각? Visual Studio 2010을 기반으로하는 MFC 대화 상자 기반 응용 프로그램을 만들고 Release x64에서 컴파일했는데 Windows 7입니다. OnTimer
메서드를 사용하여 std::exception
(문자열을 생성자에 전달)을 던지고 이 일반 메시지
으로
csrss.exe
의해 작성된 메시지 박스 "예외 알 수없는 소프트웨어 예외 (0x40000015)가 위치 0x5dff61c9에서 애플리케이션에서 발생했습니다.""프로그램을 마치려면 [확인]을 클릭"
메시지 상자가 나는 예외에 부착 된 문자열을보고하지 않습니다 "프로그램을 디버그하려면 [취소]를 클릭"그래서 그것을하지 않습니다 매우 유용합니다. Windows Error Reporting Service를 사용하지 않도록 설정하고 WerFault.exe의 이름을 변경했기 때문에 멋진 TaskDialog 대신 메시지 상자가 나타납니다.
아마도 내 자신의 메시지 상자를 잊어 버려야하고 새로운 Windows 오류보고를 받아 들여야합니까?
안녕하세요, 이것은 CException이 처리되지 않은 경우에만 호출됩니까? 사용자 정의 예외 클래스에 대해 비슷한 동작을 제공하는 방법이 있습니까? 감사합니다. – NHDaly
CException을 상속 한 처리되지 않은 예외는'ProcessWndProcException'에서 처리됩니다. 코드에서 이것을 쉽게 테스트 할 수 있습니다. –
자, 고마워. (예, 미안 해요, 지금은 Windows 컴퓨터가 아닙니다 ..) 또한 사용자 정의 예외 클래스에 대해 동일한 동작을 제공하는 방법을 알고 있습니까? 감사합니다. – NHDaly