如何用英语获取boost :: system :: error_code :: message?

时间:2013-07-04 08:32:23

标签: winapi boost locale boost-system

在具有本地化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设置区域设置 - 它没有帮助。

更新:只是澄清一下:基本上,我的问题是如何以编程方式“覆盖”user default language以及为什么设置区域设置不够。

2 个答案:

答案 0 :(得分:3)

一直在互联网上寻找解决方案,最后找到this。 基本上,您应该在SetThreadUILanguage / main

中致电WinMain

答案 1 :(得分:1)

猜测一下,您需要为dwLanguageId而不是默认语言指定英语。 E.g:

MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT)

或者,如果你想要特别是美国英语:

MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)

请注意,如果指定语言的消息不存在,则会失败。因此,您可能需要处理ERROR_RESOURCE_LANG_NOT_FOUND并尝试使用dwLanguageId=0再次调用它。

有关详细信息,请see MSDN