Na Win7 z zlokalizowanym interfejsem użytkownika, error_code::message()
zwraca komunikat inny niż angielski. O ile widzę (w Boost, 1,54, dla system_error_category
), powyższa funkcja sprowadza się do następującego WinAPI rozmowy:Jak uzyskać boost :: system :: error_code :: message in English?
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
);
Jak zdobyć powyższy FormatMessage
powrotu komunikat angielskiego? Próbowałem ustawić lokalizację, zarówno z funkcjami std
, jak iz SetThreadLocale
- to nie pomogło.
Aktualizacja: Tylko wyjaśnienie: w zasadzie moje pytanie brzmi jak „override” programowo user default language i dlaczego ustawienie regionalne nie wystarczy.
Jak już wspomniałem, to nie mój kod, ale Boost.System, który wywołuje 'FormatMessage'. –
Napisz więc swoją własną funkcję. To nie jest trudne. –
Patching Boost jest opcją, ale wolę bardziej czyste rozwiązanie. W rzeczywistości chodzi o to, czy można przesłonić (LANG_NEUTRAL, SUBLANG_DEFAULT), tj. "Domyślny język użytkownika" (http://msdn.microsoft.com/en-us/library/windows/desktop/dd373908(v=vs.85) .aspx). Czy nie powinno wpływać na to ustawienie narodowe wątku lub globalne ustawienia narodowe? –