LPCSTR _FormatErrorMessage( LPCTSTR szReason, DWORD dwErrCode )
{
static TCHAR szErrMsg[1024];
memset(szErrMsg, 0, sizeof(szErrMsg));
//DWORD dwErrCode = GetLastError(); //之前的错误代码
LPVOID lpMsgBuf = NULL;
DWORD dwLen = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwErrCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
if(dwLen == 0)
{
DWORD dwFmtErrCode = GetLastError(); //FormatMessage 引起的错误代码
_stprintf_s(szErrMsg, _T("FormatMessage failed with %u\n"), dwFmtErrCode);
}
if(lpMsgBuf)
{
_stprintf_s(szErrMsg, _T("%s\n Code = %u, Mean = %s"),
szReason, dwErrCode, (LPCTSTR)lpMsgBuf);
#ifdef _DEBUG
MessageBox( NULL, szErrMsg, "Error", MB_OK | MB_ICONINFORMATION );
#endif
}
if(lpMsgBuf)
{
// Free the buffer.
LocalFree( lpMsgBuf );
lpMsgBuf = NULL;
}
return szErrMsg;
}
//测试
LPCSTR szErrMsg = _FormatErrorMessage( _T("Test"), ERROR_ACCESS_DENIED );
_tprintf( _T("%s\n"), szErrMsg);
输出
Test
Code = 5, Mean = 拒绝访问。