我正在尝试使用格式消息来获取仅英文值
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消息:
- 语言中立
- 线程LANGID,基于线程的区域设置值
- 用户默认LANGID,基于用户的默认语言环境值
- 系统默认LANGID,基于系统默认语言环境值
- 美国英语
醇>如果FormatMessage没有找到任何前面的LANGID的消息,它将返回任何存在的语言消息字符串。如果失败,则返回ERROR_RESOURCE_LANG_NOT_FOUND。
这是否意味着,如果传递值为5,它将以英语返回消息?
你能澄清一下吗?
答案 0 :(得分:9)
文档中的数字5表示美国英语是第五种语言FormatMessage
在尝试传递零作为参数值后会尝试使用,在尝试并失败前四个选项之后。这与为函数参数传递值5
无关。
要请求英文消息,请传入美国英语的LANGID值,您可以使用MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
获取该值。 FormatMessage
文档链接指向documentation on language identifiers,后者又链接到language identifier constants and strings页面。