윈도우 - 01. 에러처리

최준영·2021년 6월 1일
0

윈도우 공부

목록 보기
1/4

윈도우에서는 함수가 반환하는 데이터의 종료에 따라 다르게 처리한다.

데이터 타입실패를 나타내는 반환 값
VOIDVOID를 반환하는 함수는 실패하지 않는 함수들이다. 윈도우에서 VOID를 반환하는 함수는 굉장히 적다.
BOOL윈도우에서 BOOL은 실제로는 INT와 같기 때문에 함수가 실패하면 0을, 성공하면 0이 아닌 값을 반환한다. 때문에 반환값 == TRUE 를 확인하는 대신, 반환값 != FALSE 를 확인하는 것이 좋다.
HANDLE함수가 실패하면 NULL, 혹은 INVALID_HANLDE_VALUE를 반환한다. 성공하면 객체의 HANDLE을 반환한다.
PVOID실패하면 NULL, 성공하면 데이터의 메모리 주소를 반환한다.
LONG/DWORD실패하면 0 혹은 -1을 반환한다. 문서를 확인할 것을 권고한다.

함수가 실패하는 경우에는 DWORD GetLastError();를 이용해서 에러에 대해 더 자세히 알 수 있다. 윈도우가 제공하는 에러 코드 목록을 참조하면 된다. 다른 함수들이 값을 덮어 쓸 수 있으므로, 문제가 생기면 이 함수를 바로 호출해서 에러 코드를 확인 하는 것이 좋다. 심지어 성공적으로 작동한 함수들도 ERROR_SUCCESS로 값을 설정하거나, 함수가 성공한 이유를 알려주기 위해서 값을 ERROR_ALREADY_EXISTS 와 같은 값으로 설정하기도 한다.

DWORD FormatMessage (
     DWORD dwFlags,
     LPCVOID pSource,
     DWORD dwMessageId,
     DWORD dwLanguageId,
     PTSTR pszBuffer,
     DWORD nSize,
     va_list *Arguments
)

위의 함수를 이용해서 에러코드로 에러의 구체적인 설명을 구할 수 있다.

개인 정의 에러 코드

윈도우가 제공하는 에러 코드 목록에 필요로 하는 에러 코드가 없을 경우, 새로운 에러코드를 만들 수 있다. 에러 코드는 32비트인데, 아래와 같이 정의되어 있다.

비트내용의미
31-30심각도0 = 성공
1 = 정보
2 = 주의
3 = 에러
29MS/고객0 = MS 정의 코드
1 = 고객 정의 코드
28예약됨항상 0
27 - 16식별 코드첫 256의 값들은 MS가 예약함
15 - 0예외 코드MS 혹은 고객이 정의한 코드
profile
다양하게 이것저것 배우는 개발자입니다.

0개의 댓글