Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

embelog

Chapter1. 에러 핸들링 본문

Windows Via C++

Chapter1. 에러 핸들링

길동마누라 2021. 4. 14. 01:42

1. 윈도우 함수의 대표적인 반환 자료형

자료형 실패했을때 값
BOOL FALSE, 결과 비교시 TRUE 가 아닌 FALSE 랑 비교 해야함
HANDLE NULL or INVALID_HANDLE_VALUE(-1)
PVOID NULL
LONG/DWORD 함수별로 각기 다름( SDK 문서 확인 필요)

 

2. 윈도우 함수 실패 시 에러코드 확인법

 

DOWRD GetLastError();

 

에러코드를 확인하기 위해 GetLastError()함수를 호출한다.

 

에러코드는 함수를 호출한 쓰레드의 TLS에 저장되는데, GetLastError() 함수는 

TLS로 부터 에러코드를 가져온다.

 

3. 윈도우 함수 실패 시 주의 사항

 

윈도함수 실패 시 바로 GetLastError 함수를 호출해야 한다.

실패 했음에도 불구하고, 에러코드를 확인하지 않고

다른 윈도우 함수를 호출했을 경우, 이전에 실패한 함수의 에러코드는 다른 윈도우 함수 호출로 인해 덮혀 씌어질 수 있기 때문이다.

더보기

Remarks

Functions executed by the calling thread set this value by calling the SetLastError function. You should call the GetLastError function immediately when a function's return value indicates that such a call will return useful data. That is because some functions call SetLastError with a zero when they succeed, wiping out the error code set by the most recently failed function.

 

출처:http://docs.microsoft.com/en-us/windows/win32/api/errhandlingapi/nf-errhandlingapi-getlasterror

 

몇몇 윈도우 함수의 경우 성공했음에도 불구하고 GetLastError함수를 호출하는 경우가 있다.

예를 들어 두번 연속으로 CreateEvent 함수를 호출하면 이에 대한

에러 코드로 ERROR_ALREADY_EXIST가 셋되는 경우가 있다.

이를 통해 부가적인 성공 이유를 전달 받을 수 있다.

 

 

4. Visual Studio에서 Debug 모드시, 에러코드 확인 방법

Debug Watch 창에 $err,hr 추가하면, Error값과, 이에 대한 설명을 볼수 있다.

 

'Windows Via C++' 카테고리의 다른 글

Chapter3. 커널 오브젝트1  (0) 2021.05.03
Chapter2. 문자와 문자열로 작업하기  (0) 2021.04.18
Chapter15. VirtualAlloc  (0) 2021.03.21