11

我正在尝试使用格式消息来获取仅英文值

MSDN 指定以下内容

DWORD WINAPI FormatMessage(
  _In_      DWORD dwFlags,
  _In_opt_  LPCVOID lpSource,
  _In_      DWORD dwMessageId,
  _In_      DWORD dwLanguageId,
  _Out_     LPTSTR lpBuffer,
  _In_      DWORD nSize,
  _In_opt_  va_list *Arguments
);

对于 dwLanguageId 参数,

请求消息的语言标识符。如果 dwFlags 包含 FORMAT_MESSAGE_FROM_STRING,则忽略此参数。

如果您在此参数中传递特定 LANGID,则 FormatMessage 将仅返回该 LANGID 的消息。如果函数找不到该 LANGID 的消息,它将 Last-Error 设置为 ERROR_RESOURCE_LANG_NOT_FOUND。如果您传入零,则 FormatMessage 按以下顺序查找 LANGID 消息:

  1. 语言中立
  2. 线程 LANGID,基于线程的语言环境值
  3. 用户默认 LANGID,基于用户的默认语言环境值
  4. 系统默认 LANGID,基于系统默认语言环境值
  5. 美国英语

如果 FormatMessage 没有找到任何上述 LANGID 的消息,它会返回任何存在的语言消息字符串。如果失败,则返回 ERROR_RESOURCE_LANG_NOT_FOUND。

这是否意味着,如果值为 5,它将返回英文消息?

你能澄清一下吗?

4

1 回答 1

13

文档中的数字 5 表示当您将零作为参数值传递时,美国英语是第五种语言,FormatMessage它将尝试使用前四个选项并失败后。5这与传递该函数参数的值无关。

要请求英语消息,请传入美国英语的 LANGID 值,您可以使用MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US). 该FormatMessage文档链接到有关语言标识符的文档,该文档又链接到语言标识符常量和字符串的页面。

于 2012-10-03T20:07:55.830 回答