글
시스템 에러가 발생해서 GetLastError()을 사용해서 에러 값을 보면 숫자이기 때문에 어떤 에러인지 알기 힘듭니다. 이때 Win32 API인 FormatMessage를 사용하면 에러 문자열로 변환해주므로 에러 내용을 알기 편합니다.
제 경우는 네트웍에서 에러가 발생하면 아래와 같이해서 로그로 남기도록 합니다.
void Socket::SocketError( INT32 ErrCode, char* pFunctionName )
{
// pFunctionName는 이 에러가 발생한 곳의 함수 이름
LPVOID lpMsgBuf;
FormatMessage
( FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_IGNORE_INSERTS
, NULL
, ErrCode
, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
, (LPTSTR) &lpMsgBuf
, 0
, NULL );
Logger->Write( "%s - GetLastError(%d - %s)", pFunctionName, ErrCode, lpMsgBuf );
}
이 API를 사용하기 위한 조건
OS : Windows 2000 이상
헤더파일 : winbase.h(windows.h에 포함되어 있음)
라이브러리 : kernel32.lib
DLL : kernel32.dll
자세한 내용은 아래를 참고해 주세요
MSDN : http://msdn.microsoft.com/en-us/library/ms679351%28VS.85%29.aspx
댓글