如何获得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

上一篇: How to get boost::system::error

下一篇: Read 16 bits from memory in Assembly x86 NASM