На Win7 с локализованным пользовательским интерфейсом error_code::message()
возвращает неанглийское сообщение. Насколько я вижу (в Boost, 1.54, для system_error_category
), выше функция сводится к следующему вызову WinAPI:Как получить boost :: system :: error_code :: сообщение на английском языке?
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 и почему локализация установки недостаточно.
Как я уже говорил, это не мой код, а Boost.System, который вызывает 'FormatMessage'. –
Ну, тогда напишите свою собственную функцию. Это не сложно. –
Patching Boost - это вариант, но я бы предпочел более чистое решение. На самом деле возникает вопрос, можно ли переопределить (LANG_NEUTRAL, SUBLANG_DEFAULT), то есть «Язык по умолчанию пользователя» (http://msdn.microsoft.com/en-us/library/windows/desktop/dd373908(v=vs.85) .aspx). Не следует ли влиять на локализацию или глобальную локаль? –