본문 바로가기

Programming/Win32&MFC&COM

GetLastError() 함수를 통한 에러 확인

반응형

Windows 프로그래밍을 할 때 에러를 확인하기 위해서 GetLastError() 를 사용합니다.

GetLastError() 함수의 원형은 다음과 같습니다.

DWORD WINAPI GetLastError(VOID)

GetLastError()는 가장 최근의 에러의 번호를 리턴해줍니다.

함수 이름 자체가 함수의 기능을 충실히 설명하고 있습니다.

GetLastError()로 에러 번호를 가져올 수 있는데 이 에러의 번호는 미리 정의가 되어있습니다.

winerror.h 파일의 정의 내용 중 일부입니다.

//
// Define the severity codes
//


//
// MessageId: ERROR_SUCCESS
//
// MessageText:
//
// The operation completed successfully.
//
#define ERROR_SUCCESS                    0L

#define NO_ERROR 0L                                                 // dderror
#define SEC_E_OK                         ((HRESULT)0x00000000L)

//
// MessageId: ERROR_INVALID_FUNCTION
//
// MessageText:
//
// Incorrect function.
//
#define ERROR_INVALID_FUNCTION           1L    // dderror

//
// MessageId: ERROR_FILE_NOT_FOUND
//
// MessageText:
//
// The system cannot find the file specified.
//
#define ERROR_FILE_NOT_FOUND             2L

//
// MessageId: ERROR_PATH_NOT_FOUND
//
// MessageText:
//
// The system cannot find the path specified.
//
#define ERROR_PATH_NOT_FOUND             3L

에러 코드는  MessageID와 MessageText, 그리고 에러의 상수 이름으로 구성되어 있습니다.

보통은 저 에러 번호를 그대로 사용하지 않고, ERROR_SUCCESS같이 문자를 이용합니다.

이 방법이 더 명시적이고 보기 좋은 코딩이 가능하기 때문입니다.

그럼 이 GetLastError()함수를 어떻게 사용하는 지 보도록 하겠습니다.

간단한 소스코드를 보도록 하겠습니다.

#include "stdafx.h"
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
	cout << "Last Error : " << GetLastError() << endl;
	SetLastError(2);
	cout << "Last Error : " << GetLastError() << endl;
	
	return 0;
}

SetLastError()로 에러를 변경했습니다.

결과를 실행하면 다음과 같이 출력이 됩니다.

에러 코드의 의미를 확인하기 위해서는 Visual Studio의 TOOLS 메뉴에 있는 Error Lookup으로 확인 가능합니다.

2번 에러는 파일을 찾을 수 없을 때 발생하는 에러입니다.

프로그래밍 과정에서 에러가 발생하면 GetLastError()를 추가해서 에러를 해결할 수 있습니다.

반응형