如何获得boost :: system :: error
在具有本地化UI的Win7上, error_code::message()
返回非英文消息。 就我所见(在Boost 1.54中,对于system_error_category
),上述函数归结为以下WinAPI调用:
DWORD retval = ::FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ev,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPSTR) &lpMsgBuf,
0,
NULL
);
如何让上面的FormatMessage
返回一条英文消息? 我试图用std
函数和SetThreadLocale
设置语言环境 - 它没有帮助。
更新 :只是澄清:本质上,我的问题是如何以编程方式“覆盖”用户默认语言以及为什么设置语言环境不够。
在互联网上搜索解决方案,最后找到了这个。 基本上,你应该在main
/ WinMain
调用SetThreadUILanguage
。
猜测,您需要为dwLanguageId
指定英语而不是默认语言。 例如:
MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT)
或者,如果你想具体美国英语:
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
请注意,如果指定语言的消息不存在,这将失败。 因此,您可能需要处理ERROR_RESOURCE_LANG_NOT_FOUND
然后尝试使用dwLanguageId=0
再次调用它。
有关更多信息,请参阅MSDN。
链接地址: http://www.djcxy.com/p/72453.html