带有占位符的 FormatMessage

Posted

技术标签:

【中文标题】带有占位符的 FormatMessage【英文标题】:FormatMessage with placeholders 【发布时间】:2011-05-31 15:43:52 【问题描述】: CString ErrorMessageFromErrorCode(DWORD errorCode) 无效* pMsgBuf = NULL; ::格式信息( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 空值, 错误代码, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &pMsgBuf, 0, 空值); CString 结果; 如果 ( pMsgBuf ) 结果 = (LPTSTR) pMsgBuf; LocalFree(pMsgBuf); 如果(结果。长度()== 0) 结果 = _T("未知错误"); 返回结果;

当使用参数 2 调用时,该函数返回“系统找不到指定的文件。”。当使用 0xC1 调用时,它返回“未知错误”。 Microsoft 错误查找实用程序显示 0xC1:“%1 不是有效的 Win32 应用程序。”。因此,当错误消息包含占位符时,我的功能不起作用。 有没有通用的方法来获得与错误查找相同的结果,而无需了解错误代码?

【问题讨论】:

参数2?你的意思是 FORMAT_MESSAGE_FROM_SYSTEM?看起来它正在运行,并且您曾尝试打开或删除以前不存在的文件。 【参考方案1】:

尝试将FORMAT_MESSAGE_IGNORE_INSERTS 添加到标志中。

【讨论】:

必读:The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag 我知道这是一个旧答案,但我想知道......有没有办法找出它想要的价值?我的意思是,您刚刚调用了一些返回该错误的函数,并且可能有一些特定的文件试图加载并发现不是有效的 win32 应用程序。对于这个特定的错误消息,它可能是您传递给 LoadLibrary 的字符串,但对于另一个占位符是您尝试访问的软盘的序列号等。 @Random832:不,据我所知,没有办法。

以上是关于带有占位符的 FormatMessage的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13 - 带有占位符的 UITextField 让应用程序崩溃

Laravel 数据库选择带有占位符的下拉菜单

带有可选占位符的 string.format()

带有位置占位符的 ON DUPLICATE KEY UPDATE 的语法

IE10+ 上的 AngularJS,带有占位符的文本区域导致“无效参数”。

Python sqlite3 构建带有动态占位符的部分