Su Win7 con interfaccia utente localizzata, error_code::message()
restituisce un messaggio non in inglese. Per quanto riguarda la vedo (in Boost 1.54, per system_error_category
), la funzione di cui sopra si riduce al seguente chiamata WinAPI:Come ottenere boost :: system :: error_code :: message in inglese?
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
);
Come ottenere quanto sopra FormatMessage
di restituire un messaggio di inglese? Ho provato ad impostare le impostazioni internazionali, entrambe con le funzioni std
e con SetThreadLocale
- non ha aiutato.
Aggiornamento: Solo una precisazione: in sostanza, la mia domanda è come "override" di programmazione la user default language e perché impostare il locale non è sufficiente.
Come ho già detto, non è il mio codice, ma Boost.System che chiama 'FormatMessage'. –
Bene, scrivi la tua funzione allora. Non è difficile. –
Patching Boost è un'opzione, ma preferirei una soluzione più pulita. In realtà, la domanda è se è possibile eseguire l'override (LANG_NEUTRAL, SUBLANG_DEFAULT), ovvero "Lingua predefinita utente" (http://msdn.microsoft.com/en-us/library/windows/desktop/dd373908(v=vs.85) aspx). Non dovrebbe influenzare la locale o la locale globale? –