带占位符的FormatMessage

时间:2011-05-31 15:43:52

标签: c++ windows

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 Error Lookup实用程序显示0xC1:“%1不是有效的Win32应用程序。”。因此,当错误消息包含占位符时,我的功能不起作用。 是否有通用的方法来获得与错误查找相同的结果,而不知道有关错误代码的任何信息?

1 个答案:

答案 0 :(得分:3)

尝试将FORMAT_MESSAGE_IGNORE_INSERTS添加到标记中。