시스템 에러가 발생해서 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



저작자 표시
신고
by 흥배 2010.12.06 09:00
| 1 |

티스토리 툴바