Windows API 錯誤碼解析

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章