2012-07-21 25 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