2011-05-31 23 views
0
 
CString ErrorMessageFromErrorCode(DWORD errorCode) 
{ 
    void* pMsgBuf = NULL; 

    ::FormatMessage(
     FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 
     NULL, 
     errorCode, 
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
     (LPTSTR) &pMsgBuf, 
     0, 
     NULL); 

    CString result; 

    if (pMsgBuf) 
    { 
     result = (LPTSTR) pMsgBuf; 
     LocalFree(pMsgBuf); 
    } 

    if (result.Length() == 0) 
     result = _T("Unknown error"); 


    return result; 
} 

当带参数2调用,这个函数返回“系统找不到指定的文件。”当用0xC1调用时,它返回“未知错误”。 Microsoft错误查找实用程序显示0xC1:“%1不是有效的Win32应用程序”。所以,当错误信息包含占位符时,我的功能不起作用。 是否有通用的方式来获得相同的结果作为错误查找,不知道任何关于错误代码?的FormatMessage用占位符

+0

参数2?你的意思是FORMAT_MESSAGE_FROM_SYSTEM?看起来它正在工作,并且您试图打开或删除以前不存在的文件。 – AJG85 2011-05-31 15:51:13

回答

3

尝试将FORMAT_MESSAGE_IGNORE_INSERTS添加到标志。

+1

强制性阅读:[FORMAT_MESSAGE_IGNORE_INSERTS标志的重要性](http://blogs.msdn.com/b/oldnewthing/archive/2007/11/28/6564257.aspx) – GSerg 2011-05-31 16:21:02

+0

我知道这是一个旧的答案,但我想知道...有没有办法找出它想要的价值?我的意思是,你只是调用了一些返回该错误的函数,并且可能有一些它尝试加载的特定文件,并且发现它不是有效的win32应用程序。对于此特定的错误消息,它可能是您传递给LoadLibrary的字符串,但另一个占位符是您试图访问的软盘的序列号等。 – Random832 2013-08-12 21:20:49

+0

@ Random832:不,据我所知,没有办法做到这一点。 – 2013-08-13 16:20:16