DWORD GetExceptionCode(void);
예외가 발생했을 때 어떠한 종류의 예외가 발생했는지를 확인하기 위해서 사용
example code)
__except(EXCEPTION_CONTINUE_HANDLER){
DWORD exptType = GetExceptionCode();
switch( exptType )
{
case EXCEPTION_ACCESS_VIOLATION:
_tprintf(_T(" Access violation \n\n"));
break;
case EXCEPTION_INT_DIVIDE_BY_ZERO:
_tprintf(_T(" Divide by zero \n\n"));
break;
}
}
EXCEPTION_ACCESS_VIOLATION (0xC0000005) 메모리 참조 오류를 구분하기 위해서 정의해 놓은 정수값
EXCEPTION_INT_DIVIDE_BY_ZERO (0xC0000094) 정수를 0으로 나누는 예외를 너타내기 위해 정의해 놓은 정수값
EXCEPTION_BREAKPOINT (0x80000003) 중단점 발생하면!
위 함수보다 더욱 자세하게 예외에 대한 내용을 알고 싶다면
LPEXCEPTION_POINTERS GetExceptionInformation(void);
함수를 호출한다.
구조체 주소를 리턴한다. EXCEPTION_POINTERS구조체를 봐보겠다.
typedef struct _EXCEPTION_POINTERS {
PEXCEPTION_RECORD ExceptionRecord; //예외에 대한 정보가 담김
PCONTEXT ContextRecord; //프로세서의 레지스터 데이터를 비롯한 프로세서의 종속적인 정보
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
typedef struct _EXCEPTION_RECORD {
DWORD ExceptionCode; //RaiseException함수의 첫번째 인자가 들어옴
DWORD ExceptionFlags; //두번째 인자
struct _EXCEPTION_RECORD *ExceptionRecord;
PVOID ExceptionAddress;
DWORD NumberParameters; //세번째 인자
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; //네번째 인자
} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
'My Study > Function' 카테고리의 다른 글
GetFileTime, FileTimeToSystemTime, SystemTimeToTzSpecificLocalTime (0) | 2010.02.25 |
---|---|
RaiseException (0) | 2010.02.25 |
SetEvent (0) | 2010.02.25 |
ResetEvent (0) | 2010.02.25 |
CreateEvent (0) | 2010.02.25 |