В настоящее время мы сталкиваемся с проблемой, что внешний компонент (мы, к сожалению, не знаем, который) загружается при использовании диалога открытия/сохранения файла Windows, некоторые системы меняют локаль процесса, возможно, делая вызов setlocale(LC_ALL, "")
.Можно ли отключить setlocale() в процессе?
Это испортит наше приложение, потому что оно зависит от стандартного языкового стандарта (который не изменяется ни одним из наших собственных компонентов во время выполнения).
Таким образом, мы должны убедиться, что ни один из setlocale()
никогда не имеет никакого эффекта при вызове в процессе, или нам нужно обнаруживать, когда вызывается эта функция, а затем сбрасывает языковой стандарт по умолчанию в «C».
Есть ли способ достичь любой из этих целей?
Вы можете поставить точку останова на функции библиотеки - см. https://stackoverflow.com/questions/3080624/debug-break-on-win32-api-functions – sashoalm
@sashoalm Спасибо, но, к сожалению, мы не можем отладить эту проблему, потому что это не происходит на любом компьютере разработки. Даже если бы это было сделано, и мы знали этот компонент, это не помогло бы значительно защитить процесс от таких изменений. – floele
Попробуйте использовать батут, а затем - https://stackoverflow.com/questions/189725/what-is-a-trampoline-function – sashoalm