2012-07-21 59 views
1

我有一个使用Visual Studio 2008开发的使用Adobe ActiveX控件(我已安装Adobe Reader X)的MFC应用程序。我尝试使用setViewRect函数设置缩放矩形,并且它完美地工作。ActiveX控件 - MFC语言环境

现在问题出现在我的Windows区域设置中时,小数点符号被设置为逗号而不是点(例如在德国区域设置中)。缩放矩形的参数似乎被错误地解释。

我使用了ProcessMonitor,发现当创建Adobe ActiveX Control并在我的进程中加载​​了它的DLL时,它调用setlocale,因此应用程序使用当前的Windows区域设置而不是默认的“C”语言环境。因此,应用程序以错误的方式解释数字。

加载Adobe后,我试图重置语言环境为“C”,并且此解决方法解决了问题。

现在,当我将应用程序迁移到Visual Studio 2010时,问题再次出现。显然,Adobe DLL(“c:\ Program Files文件(x86)\ Common Files \ Adob​​e \ Acrobat \ ActiveX \ AcroPDF.dll”)是使用Visual Studio 2008.因此,当它设置区域设置时,它在MSVCR90.dll中完成。当我重置语言环境时,我使用了相同的DLL。

现在我的应用程序在VS2010中,调用setlocale在MSVCR100.dll中完成,因此它不会影响MSVCR90.dll中已经设置的区域设置。

有没有办法来设置我的应用程序内托管的COM对象的区域设置?

非常感谢你提前:)

回答

0

这仅仅是一个在黑暗中拍摄,但你可以尝试加载MSVCR90.DLL与LoadLibrary(因为DLL已经加载,这将只是给你一个处理它,它不会加载它两次),然后用GetProcAddress找到指向它的setlocale函数的指针。然后你就可以调用这个DLL的setlocale函数。这是一个丑陋的黑客,但它可能工作。

+0

谢谢你satuon的回复:) 我试过这样做,但不幸的是LoadLibrary(_T(“MSVCR90.dll”))返回一个NULL句柄。它只适用于当我LoadLibrary与MSVCR90.dll(C:\\ Windows \\ winsxs \\ x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_50934f2ebcb7eb57 \\ msvcr90.dll)的完整路径,这是不可行的。 – dood 2012-07-25 15:34:29

+0

但是,当您尝试使用完整路径时,它是否正常工作? – sashoalm 2012-07-25 16:29:29

+0

是的,它:)谢谢你的提示:) 我只是不能在我的应用程序中使用完整的路径。 – dood 2012-07-25 18:43:48