【问题标题】:FormatMessage Fails with error code 317FormatMessage 失败,错误代码 317
【发布时间】:2011-06-07 11:22:50
【问题描述】:

当我执行以下代码片段时,它失败并显示 错误代码 317。如何解决问题?我们正在为项目使用 Unicode 字符集

  char* pszMessgeBuffer = NULL;
  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM | 
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dwErrorId,
        0, // Default language
        (LPTSTR) &pszMessgeBuffer,
        0,
        NULL )

【问题讨论】:

  • 函数末尾是否缺少分号?
  • @iammilind:OP 可以编译,所以我认为没有。
  • 错误代码 317 是 ERROR_MR_MID_NOT_FOUND。所以我猜dwErrorId 在某种程度上是错误的。该号码必须是有效的系统消息。
  • 这是一个邪恶的演员阵容,它永远无法正常工作。它只会阻止编译器告诉你你做错了什么。使用 FormatMessageA() 或传递 wchar_t[]。
  • 为什么要使用 char* 然后将其转换为宽 (LPTSTR) 字符串?那是非常糟糕的形式,不会使目标成为 char*。它不会导致这个特定的错误,但它仍然是错误的形式。在这里使用它表明您可能也在其他地方使用它。

标签: c++ visual-c++ windows-ce


【解决方案1】:

使用 Visual Studio 中的错误代码查找 tool,317 被描述为

系统找不到消息文本 对于消息中的消息号 0x%1 %2 的文件。

这意味着系统中不存在上一个错误代码的消息描述。带有 FORMAT_MESSAGE_FROM_SYSTEM 标志的 FormatMessage 的 MSDN 文档指出:

并非所有基于 Windows Embedded CE 设备将包含系统 消息表资源。这是一个 Windows 的可选部分 嵌入式 CE 操作系统 经常移除以节省空间。

【讨论】:

    【解决方案2】:

    我认为错误 317 是使用 Win32 函数 LsaNtStatusToWinError(87) 的结果,其中 winstatus 87 表示“参数不正确”

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 2014-01-25
      • 2013-06-24
      • 2011-08-01
      • 2017-09-13
      • 1970-01-01
      相关资源
      最近更新 更多