윈도우즈 시스템에서 에러를 체크해주는 GetLastError()
아쉽지만, 리턴값이 DWORD 이다.
물론, 테이블을 확인해서 어떤 에러인지 확인할 수 있지만( http://honestgame.tistory.com/120 )
매번 확인하는게 귀찮을때 문자열로 변환하여 볼 수 있다.
OS에서 Message Dll로 테이블을 관리하고 있는데, FormatMessage()를 이용하면 된다.
함수원형은 다음과 같다.
DWORD WINAPI FormatMessage(
_In_ DWORD dwFlags,
_In_opt_ LPCVOID lpSource,
_In_ DWORD dwMessageId,
_In_ DWORD dwLanguageId,
_Out_ LPTSTR lpBuffer,
_In_ DWORD nSize,
_In_opt_ va_list *Arguments
);
이용하여 간단한 예를 들어보면
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS ,NULL , dwError , MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) , (LPTSTR) &lpMsgBuf, 0 , NULL );
CString strErrorMsg = (LPCTSTR)lpMsgBuf;
LocalFree( lpMsgBuf );
이런식으로 strErrorMsg 를 출력해주면 된다.
주의할점은 void* 를 마지막에 해지해줘야 한다는점.
1. FORMAT_MESSAGE_ALLOCATE_BUFFER
message의 메모리를 시스템에서 할당을 해달라고 요청하는 부분
이미 할당된 메모리를 사용하는경우엔 해당 플래그를 제거해야 한다.
2. MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
메시지의 언어를 지정해주는 부분입니다. 위와같이 지정 한 경우엔
제어판에서 설정한 기본 언어로 지정된다.
좀 더 자세한 사항은 msdn를 참조하면 된다.
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms679351(v=vs.85).aspx
'프로그래밍 > C++' 카테고리의 다른 글
[link] C++ Unit Test - VisualStudio (0) | 2017.04.25 |
---|---|
C++17 string_view (0) | 2017.04.13 |
[링크] 최고의 C++ 강의 5개 (0) | 2017.02.06 |
자료구조 SearchTime - map,set,unordered_map (0) | 2017.01.11 |
C++ 시스템 환경변수 읽어오기 (0) | 2017.01.06 |