Obecnie mamy problem z tym, że komponent zewnętrzny (niestety nie wiemy, który z nich) jest ładowany podczas korzystania z okna otwierania/zapisywania pliku systemu Windows, niektóre systemy zmieniają ustawienia regionalne procesu, prawdopodobnie wykonując wywołanie setlocale(LC_ALL, "")
.Czy można wyłączyć setlocale() w procesie?
To zakłóca działanie naszej aplikacji, ponieważ opiera się na ustawianiu standardowych ustawień narodowych (które nie są zmieniane przez żaden z naszych własnych komponentów podczas pracy).
Musimy więc upewnić się, że setlocale()
nigdy nie zadziała, gdy zostanie wywołane w procesie, lub musimy wykryć za każdym razem, gdy wywoływana jest ta funkcja, a następnie zresetować ustawienia regionalne do domyślnego ustawienia narodowego "C".
Czy istnieje sposób na osiągnięcie jednego z tych celów?
można umieścić punkt przerwania na funkcjach bibliotecznych - zobacz https://stackoverflow.com/questions/3080624/debug-break-on-win32-api-functions – sashoalm
@sashoalm Dzięki, ale niestety nie możemy debugować tego problemu, ponieważ nie dzieje się to na żadnym komputerze programistycznym. Nawet gdyby tak było i znaliśmy ten komponent, nie pomogłoby to w znacznej ochronie procesu przed takimi zmianami. – floele
Spróbuj użyć trampoliny, a następnie - https://stackoverflow.com/questions/189725/what-is-a-trampoline-function – sashoalm