GetLastError() に対応するメッセージを取得する

すぐ忘れるのでメモ.GetLastError() でエラー ID を取得して,FormatMessage() でそれに対応するメッセージを取得する関数

#include <string>
#include <windows.h>
#include <tchar.h>

/* ------------------------------------------------------------------------- */
/*
 *  GetErrorMessage
 *
 *  指定されたエラー ID に対応するメッセージを取得する.
 *  http://msdn.microsoft.com/ja-jp/library/cc428939.aspx
 */
/* ------------------------------------------------------------------------- */
std::basic_string<TCHAR> GetErrorMessage(DWORD id) {
    std::basic_string<TCHAR> dest;

    LPVOID buffer = NULL;
    DWORD result = FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
	NULL,
        id,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        reinterpret_cast<TCHAR*>(&buffer),
        0,
        NULL
    );
    	
    if (result > 0 && buffer != NULL) {
        dest = reinterpret_cast<TCHAR*>(buffer);
        LocalFree(buffer);
        
        // 末尾の改行を除去
        if (!dest.empty() && dest[dest.size() - 1] == _T('\n')) dest.erase(dest.size() - 1);
        if (!dest.empty() && dest[dest.size() - 1] == _T('\r')) dest.erase(dest.size() - 1);
    }
    return dest;
}

/* ------------------------------------------------------------------------- */
/*
 *  GetLastErrorMessage
 *
 *  GetLastError() に対応するメッセージを取得する.
 */
/* ------------------------------------------------------------------------- */
std::basic_string<TCHAR> GetLastErrorMessage() {
    return GetErrorMessage(GetLastError());
}