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

Igo*_* R. 7 winapi boost locale boost-system

在具有本地化UI的Win7上,error_code::message()返回非英语消息.据我所知(在Boost 1.54中,for 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 
);
Run Code Online (Sandbox Code Playgroud)

如何让上述内容FormatMessage返回英文信息?我尝试设置语言环境,包括std函数和SetThreadLocale- 它没有帮助.

更新:只是澄清:基本上,我的问题是如何以编程方式"覆盖" 用户默认语言以及为什么设置区域设置不够.

Igo*_*sky 2

据猜测,您需要指定英语而dwLanguageId不是默认语言。例如:

MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT)
Run Code Online (Sandbox Code Playgroud)

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

MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅 MSDN