【发布时间】:2012-07-20 11:31:33
【问题描述】:
我有一个用 Visual Studio 2008 开发的 MFC 应用程序,我在其中使用 Adobe ActiveX 控件(我安装了 Adobe Reader X)。我尝试使用 setViewRect 函数设置缩放矩形,效果很好。
现在问题出现在我的 Windows 区域设置中,十进制符号设置为逗号而不是点(例如在德语区域设置中)。缩放矩形的参数似乎解释不正确。
我使用 ProcessMonitor 并发现当 Adobe ActiveX 控件被创建并在我的进程中加载它的 DLL 时,它调用 setlocale,因此应用程序使用当前的 Windows 区域设置而不是默认的“C”区域设置。因此,应用程序以错误的方式解释数字。
我尝试在加载 Adobe 后立即将区域设置重置为“C”,此解决方法解决了问题。
现在,当我将应用程序迁移到 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中设置的locale。
有没有办法设置我在应用程序中托管的 COM 对象的语言环境?
提前非常感谢你:)
【问题讨论】:
标签: visual-studio mfc activex msvcrt setlocale