Auf Win7 mit lokalisierter Benutzeroberfläche gibt error_code::message()
eine nicht englische Nachricht zurück. Soweit ich (in-Boost 1,54, für system_error_category
) zu sehen, die die obige Funktion läuft auf den folgenden WinAPI Aufruf unten:Wie bekomme ich boost :: system :: error_code :: message auf Englisch?
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
);
Wie die oben FormatMessage
erhält eine englische Nachricht zurück? Ich habe versucht, das Gebietsschema, sowohl mit std
Funktionen und mit SetThreadLocale
- es hat nicht geholfen.
Update: Nur eine Klarstellung: im Wesentlichen, meine Frage ist, wie programmgesteuert die user default language "überschreiben" und warum Einstellung Gebietsschema ist nicht genug.
Wie ich bereits erwähnt habe, ist es nicht mein Code, sondern Boost.System, das 'FormatMessage' aufruft. –
Nun, schreiben Sie Ihre eigene Funktion dann. Es ist nicht schwer. –
Patching Boost ist eine Option, aber ich würde eine sauberere Lösung bevorzugen. Tatsächlich ist die Frage, ob es möglich ist, zu überschreiben (LANG_NEUTRAL, SUBLANG_DEFAULT), dh "Benutzerstandardsprache" (http://msdn.microsoft.com/en-us/library/windows/desktop/dd373908(v=vs.85)) .aspx). Sollte sich das Thread-Gebietsschema oder das globale Gebietsschema nicht darauf auswirken? –