Windows API 錯誤碼解析
調用Windows API失敗後,通常需要通過GetLastError來獲取對應的錯誤碼,要將此錯誤碼解析爲對應的描述信息,則需要調用另外一個Windows API 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
);
詳細函數說明情況:msdn文檔
具體實現代碼:
/*
wstring 轉換爲 string
*/
std::string w2c(const wchar_t * pw)
{
std::string val = "";
if(!pw)
{
return val;
}
size_t size= wcslen(pw)*sizeof(wchar_t);
char *pc = NULL;
if(!(pc = (char*)malloc(size)))
{
return val;
}
size_t destlen = wcstombs(pc,pw,size);
/*轉換不爲空時,返回值爲-1。如果爲空,返回值0*/
if (destlen ==(size_t)(0))
{
return val;
}
val = pc;
delete pc;
return val;
}
string parseErrorCode(DWORD nErrorCode)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
nErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
string sMsg = w2c((LPTSTR)lpMsgBuf);
LocalFree(lpMsgBuf);
return sMsg;
}