Trên Win7 có giao diện người dùng được bản địa hóa, error_code::message()
trả về một thông báo không phải tiếng Anh. Theo như tôi thấy (trong Boost 1,54, cho system_error_category
), hàm trên nắm để gọi WinAPI sau:Cách tăng :: hệ thống :: error_code :: tin nhắn bằng tiếng Anh?
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
);
Làm thế nào để có được trên FormatMessage
để trả lại một thông điệp bằng tiếng Anh? Tôi đã cố gắng thiết lập miền địa phương, cả hai với chức năng std
và với SetThreadLocale
- nó không giúp được gì.
Cập nhật: Chỉ cần làm rõ: về cơ bản, câu hỏi của tôi là cách "ghi đè" lập trình user default language và tại sao đặt ngôn ngữ là không đủ.
Như tôi đã đề cập, đó không phải mã của tôi, mà là Boost.System gọi là 'FormatMessage'. –
Vâng, hãy viết hàm của riêng bạn sau đó. Nó không khó. –
Patching Boost là một lựa chọn, nhưng tôi muốn có một giải pháp sạch hơn. Trên thực tế, câu hỏi đặt ra là liệu có thể ghi đè (LANG_NEUTRAL, SUBLANG_DEFAULT), tức là "Ngôn ngữ mặc định của người dùng" (http://msdn.microsoft.com/en-us/library/windows/desktop/dd373908(v=vs.85)) .aspx). Không nên địa phương chủ đề hoặc địa phương toàn cầu ảnh hưởng đến nó? –