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


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