hahahia

오류의 확인(GetLastError 함수) 본문

Windows Programming/Windows::System

오류의 확인(GetLastError 함수)

hahahia 2012. 3. 2. 22:35

GetLastError 함수와 에러코드

- 오류가 발생했을 때, 이어서 바로 GetLastError 함수를 호출하면 오류의 원인에 해당하는 에러코드를 얻을 수 있다.

DWORD GetLastError(void); // NULL값으로 반환하면 오류가 발생했음을 알 수 있지                                            만 원인을 알 수 없다.

MSDN을 참조하면 시스템 에러코드의 종류와 해당 에러코드가 의미하는 바를 알 수 있다. 예제를 통해 시스템 에러코드를 얻는 방법을 보자.

ex1)
/* GetLastError.cpp */
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(void)
{
HANDLE hFile = CreateFile(_T("ABC.DAT"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL, NULL); // Windows system 함수
     // CreateFile함수는 함수호출이 실패할 경우 INVALID_HANDLE_VALUE를 반환 
if(hFile == INVALID_HANDLE_VALUE)  
{
_tprintf(_T("error code: %d\n"), GetLastError());
return 0;
}
return 0;

실행결과
error code : 2 // 이 에러코드를 MSDN에서 확인해보면 
                    // "The system cannot find the file specified." 파일이 없음

ex2)
/* ErrorStateChange.cpp */
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(void)
{
HANDLE hFile = CreateFile(_T("ABC.DAT"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL, NULL);
_tprintf(_T("error code : %d\n"), GetLastError()); //파일을 개방. 존재하지 않으므로 오류발생

hFile = CreateFile(_T("ABC2.DAT"), GENERIC_READ, FILE_SHARE_READ, NULL, CREATE_NEW
FILE_ATTRIBUTE_NORMAL, NULL); //ABC2.DAT 파일 생성
_tprintf(_T("error code : %d\n"), GetLastError()); // 오류확인 이상 무
return 0;

실행결과
error code : 2 //  "The system cannot find the file specified." 파일이 없음
error code : 0 // "The operation completed successfully" 이상없음.

위의 ErrorStateChange.cpp 파일을 다시한번 실행해보자..
그렇게되면 실행결과는
error code : 2 
error code : 80 // "The file exists." 생성하고자 하는 파일 ABC2.DAT파일이 이미 존                          재하기 때문에 함수 호출이 실패하였다.(생성하고자 하는 파일이 이                          미 존재하면 함수 호출이 실패하도록 전달인자를 설정함)

출처. 윈도우즈 프로그래밍 | 윤성우 저  | 한빛미디어 
Comments