У меня есть приложение MFC, разработанное с помощью Visual Studio 2008, в котором я использую элемент управления Adobe ActiveX (у меня установлен Adobe Reader X). Я пытаюсь установить прямоугольник масштабирования с помощью функции setViewRect, и она отлично работает.
Теперь проблема возникает, когда в моих региональных настройках Windows десятичный символ установлен на запятую вместо точки (например, в региональных настройках для Германии). Параметры прямоугольника масштабирования кажутся неверно интерпретированными.
Я использовал ProcessMonitor и обнаружил, что когда создается элемент управления Adobe ActiveX и его DLL загружается в мой процесс, он вызывает setlocale, и, следовательно, приложение использует текущие региональные настройки Windows вместо языкового стандарта «C» по умолчанию. Поэтому приложение неправильно интерпретирует числа.
Я попытался сбросить языковой стандарт на «C» сразу после загрузки Adobe, и этот обходной путь устранил проблему.
Теперь проблема возникла снова, когда я перенес свое приложение в Visual Studio 2010. Очевидно, Adobe DLL («c: \ Program Files (x86) \ Common Files \ Adobe \ Acrobat \ ActiveX \ AcroPDF.dll») разработана с использованием Visual Studio 2008. Таким образом, когда он устанавливает языковой стандарт, это делается в MSVCR90.dll. Когда я сбрасывал локаль, я делал это с помощью той же библиотеки DLL.
Теперь, когда мое приложение находится в VS2010, вызов setlocale выполняется в MSVCR100.dll, поэтому он не влияет на локаль, уже установленную в MSVCR90.dll.
Есть ли способ установить языковой стандарт COM-объекта, который я размещаю в своем приложении?
Огромное спасибо заранее :)