Hiện tại, chúng tôi đang gặp phải sự cố là thành phần bên ngoài (chúng tôi không biết được thành phần nào) được tải khi sử dụng hộp thoại mở/lưu tệp của Windows, một số hệ thống sẽ thay đổi ngôn ngữ của quá trình, có thể bằng cách thực hiện cuộc gọi setlocale(LC_ALL, "")
.Có thể vô hiệu hóa setlocale() trong một tiến trình không?
Điều này làm rối loạn ứng dụng của chúng tôi, bởi vì nó dựa trên ngôn ngữ chuẩn được thiết lập (không bị thay đổi bởi bất kỳ thành phần nào của chúng tôi trong thời gian chạy). Vì vậy, chúng tôi cần đảm bảo rằng setlocale()
không bao giờ có bất kỳ tác dụng nào khi được gọi trong quá trình hoặc chúng tôi cần phát hiện bất cứ khi nào chức năng này được gọi và sau đó đặt lại ngôn ngữ thành miền địa phương "C" mặc định.
Có cách nào để đạt được một trong các mục tiêu này không?
Bạn có thể đặt một breakpoint trên chức năng thư viện - xem https://stackoverflow.com/questions/3080624/debug-break-on-win32-api-functions – sashoalm
@sashoalm Cảm ơn, nhưng tiếc là chúng tôi không thể gỡ lỗi vấn đề này bởi vì nó không xảy ra trên bất kỳ PC phát triển nào. Ngay cả khi nó đã làm và chúng tôi biết thành phần, nó sẽ không thực sự giúp bảo vệ quá trình chống lại những thay đổi đó. – floele
Hãy thử sử dụng tấm bạt lò xo sau đó - https://stackoverflow.com/questions/189725/what-is-a-trampoline-function – sashoalm