Visual studio ActiveX控件-MFC语言环境

Visual studio ActiveX控件-MFC语言环境,visual-studio,mfc,activex,msvcrt,setlocale,Visual Studio,Mfc,Activex,Msvcrt,Setlocale,我有一个使用VisualStudio2008开发的MFC应用程序,其中我使用了AdobeActiveX控件(我安装了AdobeReaderX)。我尝试使用setViewRect函数设置缩放矩形,效果非常好 现在,当在“我的Windows区域设置”中,十进制符号设置为逗号而不是点(例如在德语区域设置中)时,问题出现了。缩放矩形的参数似乎解释不正确 我使用了ProcessMonitor,发现当创建Adobe ActiveX控件并在进程中加载其DLL时,它会调用setlocale,因此应用程序使用的是

我有一个使用VisualStudio2008开发的MFC应用程序,其中我使用了AdobeActiveX控件(我安装了AdobeReaderX)。我尝试使用setViewRect函数设置缩放矩形,效果非常好

现在,当在“我的Windows区域设置”中,十进制符号设置为逗号而不是点(例如在德语区域设置中)时,问题出现了。缩放矩形的参数似乎解释不正确

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

在加载Adobe之后,我尝试将区域设置重置为“C”,这个解决方法解决了这个问题

现在,当我将应用程序迁移到VisualStudio2010时,问题再次出现。显然,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对象的区域设置


提前非常感谢:)

这只是一个猜测,但您可以尝试使用
LoadLibrary
加载MSVCR90.dll(因为dll已经加载,它只会给您一个句柄,不会加载两次),然后使用
GetProcAddress
查找指向其setlocale函数的指针。然后,您将能够为此DLL调用setlocale函数。这是一个丑陋的黑客程序,但可能会奏效。

感谢satuon的回复:)我尝试过这么做,但不幸的是LoadLibrary(_T(“MSVCR90.dll”))返回空句柄。只有当我使用MSVCR90.dll(C:\\Windows\\winsxs\\x86\u microsoft.vc90.crt_1FC8B3B9A118E3B_9.0.30729.6161_none_50934f2ebcb7eb57\\MSVCR90.dll)的完整路径加载库时,它才起作用。这是不可行的。是的:)谢谢您的提示:)我无法在我的应用程序中使用完整路径。请参阅和。我通过谷歌搜索“枚举进程DLL”和“获取模块文件名”就找到了它们。如果你不寻找一条路,你就不会找到它。你不应该这么轻易放弃。