윈도우즈 환경에서는 에러번호를 알기 위해 GetLastError()함수를 사용한다.
하지만, DWORD로 넘어오기 때문에 무슨에러인지 알아보기가 어렵다. 그래서 에러번호를 문자열로 바꿔줘야할 필요가 있는데,
이 때 쓰는 함수가 FormatMessage()이다.
OS는 에러 번호를 문자열로 표시 하기위해 테이블을 하나 만들어서 DLL로 관리를 한다.
이 DLL이 Message Dll 이다.
다음은 FormatMessage를 사용하는 예이다.
int main()
{
setlocale(LC_ALL, "KOREAN"); // printf 에서 unicode 로 한글을 출력 하는 방법이다.
// C++에서는 imbue() 라는 함수로 사용해야 합니다.
HWND hwnd = CreateWindow( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); //윈도우 생성
if ( hwnd == 0 )
{
DWORD e = GetLastError(); // 실패의 이유를 조사
printf("실패 : %d\n", e );
TCHAR* s = 0;
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
0, // 메세지 DLL의 핸들
e, // 에러 번호
0, //
(TCHAR*)&s, 0, // 메세지를 담아올 버퍼
// 실제로는 이중포인터를 보내지만 함수 모양이 포인터로
// 만들어져 있으므로 형식은 1차 포인터로 보내야 한다.
0); //
_tprintf( _T("%s\n"), s );
LocalFree( s ); // FormatMessage()는 LocalAlloc()으로메모리를할당한다.
}
}
'Programming > Windows System' 카테고리의 다른 글
| 에러 핸들링 (0) | 2010.07.07 |
|---|