如何使用FormatMessage c ++获取仅英文消息

Nid*_*har 8 winapi locale

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

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
);
Run Code Online (Sandbox Code Playgroud)

对于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,它将以英语返回消息?

你能澄清一下吗?

Rob*_*edy 9

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

要请求英语消息,请传入美国英语的LANGID值,您可以使用该值MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US).该FormatMessage文档链接到文件上的语言识别,进而链接的网页语言标识符常量和字符串.

  • (迟到的评论,我知道..)您知道是否可以保证在本地化系统上提供英语错误消息? (4认同)