1

我有一个用 Visual Studio 2008 开发的 MFC 应用程序,我在其中使用 Adob​​e ActiveX 控件(我安装了 Adob​​e Reader X)。我尝试使用 setViewRect 函数设置缩放矩形,并且效果很好。

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

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

我尝试在加载 Adob​​e 后立即将语言环境重置为“C”,此解决方法解决了问题。

现在,当我将应用程序迁移到 Visual Studio 2010 时,问题再次发生。显然 Adob​​e 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 对象的语言环境?

提前非常感谢你:)

4

1 回答 1

0

这只是在黑暗中拍摄,但您可以尝试加载 MSVCR90.dll LoadLibrary(因为 DLL 已经加载,它只会给您一个 HANDLE,它不会加载两次),然后找到指针到它的 setlocale 函数GetProcAddress。然后,您将能够调用此 DLL 的 setlocale 函数。这是一个丑陋的黑客,但它可能会奏效。

于 2012-07-25T12:09:58.423 回答