c++ - 带占位符的 FormatMessage

标签 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 错误查找实用程序显示 0xC1:“%1 不是有效的 Win32 应用程序。”。因此,当错误消息包含占位符时,我的函数不起作用。 有没有通用的方法可以在不知道错误代码的情况下获得与错误查找相同的结果?

最佳答案

尝试将 FORMAT_MESSAGE_IGNORE_INSERTS 添加到标志中。

关于c++ - 带占位符的 FormatMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190105/

相关文章:

C++ Visual Studio 2010 如何在不同函数中使用 char 类型变量

c++ - 程序在用户第一次输入时什么都不做(跳过程序中的整个代码)

c - 使用和不使用 FILE_FLAG_NO_BUFFERING 的 NTFS 文件访问时间

windows - Microsoft Stack 是否始终与 16 字节对齐?

windows - 为分析设置 CPU 亲和性

c++ - 如何在Windows上调用ELF函数

c++ - VS 2008 中 C++/MFC 编译器的奇怪结果

c++ - 为什么 include(CPack) 应该在每个项目包配置之后?

python - pySerial - 有没有办法一次选择多个端口?

c++ - 在哪里寻找(对于 c++ 初学者)为 Windows Vista x64 Ultimate 创建挂起进程程序?