본문 바로가기
프로그래밍/C, C++

MFC - 예외(Exception) 처리 (try catch, CException)

by 꾸션 2015. 2. 9.

Exception 에러 메세지창으로 띄우기

try
{
  // Exception 발생 구문
}
catch (CException *ex)
{
  ex->ReportError();
}

 

Excption 에러 메세지 얻어오기

try
{
  // Exception 발생 구문
}
catch (CException *ex)
{
  TCHAR szMsg[1024] = {0,};
  ex->GetErrorMessage(szMsg, 1024);

  CString strMsg;
  strMsg.Format(/*적절한 메세지 만들기*/);
  ::AfxMessageBox(strMsg);
}

 

위에 예문을 토대로 함수를 만들어 봤습니다.

Made by 꾸션

MFC Excpetion 에러 메시지를 출력한 화면

헤더

CString GetErrorDescription(CException *ex);
CString GetDetailErrorMessage(DWORD dwErrorCode, CString strErrorDescription, CString &strFile, DWORD &dwLineNo);
void DetailErrorMessageBox(CException *ex, CString strFile, DWORD dwLineNo, UINT uMB_IconButton /*= MB_OK*/);

 

소스

CString GetErrorDescription(CException *ex)
{
  CString strExceptionDescription;
  TCHAR szException[1024] = {0,};

  if (ex->GetErrorMessage(szException, 1024))
    strExceptionDescription = szException;

  return strExceptionDescription;
}

CString GetDetailErrorMessage(DWORD dwErrorCode, CString strErrorDescription, CString &strFile, DWORD &dwLineNo)
{
  CString strErrorMessage;
  COleDateTime datetime = COleDateTime::GetCurrentTime();

  strErrorMessage.Format(
      _T("Date Time: %s\n")
      _T("ErrorCode: %d\n\n")
      _T("%s\n\n")
      _T("File: %s\n")
      _T("Line: %d"),
      datetime.Format(),
      dwErrorCode,
      strErrorDescription,
      strFile,
      dwLineNo);

  return strErrorMessage;
}

void DetailErrorMessageBox(CException *ex, CString strFile, DWORD dwLineNo, UINT uMB_IconButton /*= MB_OK*/)
{
  CString strErrorDescription = GetErrorDescription(ex);
  CString strDetailErrorMessage = GetDetailErrorMessage(GetLastError(), strErrorDescription, strFile, dwLineNo);

  ::AfxMessageBox(strDetailErrorMessage, uMB_IconButton);
}

 

사용

try
{
  // Exception 발생 구문
}
catch (CException *ex)
{
  DetailErrorMessageBox(ex, _T(__FILE__), __LINE__, MB_ICONERROR | MB_OK);
}

 

반응형

댓글