티스토리 뷰

프로그래밍/MFC

MFC 예외처리

에어버스 2016. 6. 25. 10:07

예외처리

API 는 C++ 기반이 아니라 예외처리 사용 불가
MFC 는 자바나 C#처럼 완벽하지 않지만 일부 기능 지원

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TRY { // MFC
...
}
CATCH_ALL(e) {
    e->ReportError();
    //TCHAR szMsg[256];
    //e->GetErrorMessage(szMsg, 256);
}
END_CATCH_ALL
 
try {
...
}
catch(_com_error &e) {
  AfxMessageBax(e.ErrorMessage());
}
catch(...) { // catch(...) 이대로 쓴다
  TRACE(TEXT("알수없는 에러"));
}
cs

예외 처리를 사용하면 '수행절치'와 '오류처리'가 완전히 분리된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
int MyReadFile(BYTE* pBuf, ...)
{
    int iErrorCode = 0;
    HANDLE hFile = ::CreateFile(...);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        DWORD dwFileSize = ::GetFileSize(hFile, ...);
        pBuf = new BYTE[dwFileSize];
        if (pBuf != NULL)
        {
            BOOL bRead = ::ReadFile(hFile, ...);
            if (bRead == FALSE)
                iErrorCode = -1;
            else
                iErrorCode = -2;
        }
        else
            iErrorCode = -3;
        BOOL bClose = ::CloseHandle(hFile);
        if (bClose == FALSE)
            iErrorCode = -4;
    }
    else
        iErrorCode = -5;
    return iErrorCode;
}
 
//   예외처리 방식으로 구현
int MyReadFile(BYTE* pBuf, ...)
{
    int iErrorCode = 0;
    try {
        파일 열기 작업(...);
        파일 얻기 작업(...);
        파일 할당 작업(...);
        파일 읽기 작업(...);
        파일 닫기 작업(...);
    }
    catch (파일 열기 예외 상황)
        iErrorCode = -5;
    catch (파일 닫기 예외 상황)
        iErrorCode = -4;
    catch (파일 얻기 예외 상황)
        iErrorCode = -3;
    catch (파일 할당 예외 상황)
        iErrorCode = -2;
    catch (파일 읽기 예외 상황)
        iErrorCode = -1;
    return iErrorCode;
}
cs
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31