【问题标题】:FormatMessage with placeholders带有占位符的 FormatMessage
【发布时间】: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?看起来它正在运行,并且您曾尝试打开或删除以前不存在的文件。

标签: c++ windows


【解决方案1】:

尝试将FORMAT_MESSAGE_IGNORE_INSERTS 添加到标志中。

【讨论】:

  • 我知道这是一个旧答案,但我想知道......有没有办法找出它想要的价值?我的意思是,您刚刚调用了一些返回该错误的函数,并且可能有一些特定的文件试图加载并发现不是有效的 win32 应用程序。对于这个特定的错误消息,它可能是您传递给 LoadLibrary 的字符串,但对于另一个占位符是您尝试访问的软盘的序列号等。
  • @Random832:不,据我所知,没有办法。
猜你喜欢
  • 2017-03-25
  • 2014-12-25
  • 2018-10-21
  • 2016-07-17
  • 2012-06-16
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
相关资源
最近更新 更多