Chapter 01 에러 핸들링
윈도우의 Return Value의 의미를 한번 알아보자.
자료형 | 실패했을 때의 값 |
VOID | 실패란 없다. |
BOOL | 실패하면 무조건 0을 반환 성공하면 0 이외의 값을 반환 |
HANDLE | 반환 값은 대개 NULL but -1인 INVALID_HANDLE_VALUE를 반환한다. 그래서 MSDN를 참고해서 비교해야 한다. |
PVOID | 실패시 NULL 반환 성공시 메모리 주소 반환 |
LONG/DWORD | 뭐 만든사람이 알아서 만든거니 MSDN을 보자 |
윈도우 함수가 실패하면 Thread의 지역 저장소에 적절한 에러코드를 저장해 둔다.
Thread의 지역저장소에 저장된 에러 코드를 아래 함수가 꺼내 온다.
[Function] GetLastError
DWORD GetLastError();
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx
Return Value는 DWORD이며 해당 VALUE의 정의는 WinError.h.에 정의되어 있다.
해당 Header의 일부 내용이다.
함수 실패시 무조건 GetLastError을 호출해야 한다.
[Tool] Error Lookup
GetLastError의 Return Value(DWORD)를 입력하면 WinError.h 의 MessageText를 출력해주는 Tool(Visual Studio 설치하면 있어요.)
[그림 2] Value 3을 입력한 Error Lookup [그림 3] Value 3의 WinError.h 의 정의
[Function] FormatMessage
DWORD WINAPI FormatMessage(
_In_ DWORD dwFlags,
_In_opt_ LPCVOID lpSource,
_In_ DWORD dwMessageId,
_In_ DWORD dwLanguageId,
_Out_ LPTSTR lpBuffer,
_In_ DWORD nSize,
_In_opt_ va_list *Arguments
);
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
[Function] SetLastError
VOID SetLastError(DWORD dwErrCode)
http://msdn.microsoft.com/ko-kr/library/windows/desktop/ms680627(v=vs.85).aspx
[예제] ErrorShow Application
[Function] GetDlgItemInt
UINT GetDlgItemInt(
int nID,
BOOL* lpTrans = NULL,
BOOL bSigned = TRUE
) const;
http://msdn.microsoft.com/ko-kr/library/c7t43w0s.aspx
http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=53
[Macro] MAKELANGID
WORD MAKELANGID(
USHORT usPrimaryLanguage,
USHORT usSubLanguage
);
http://msdn.microsoft.com/ko-kr/library/dd373908(en-us,VS.85).aspx