Adobe ActiveX コントロールを使用する Visual Studio 2008 で開発された MFC アプリケーションがあります (Adobe Reader X がインストールされています)。setViewRect 関数を使用してズーム四角形を設定しようとすると、完全に機能します。
Windows の地域設定で、小数点記号がドットではなくコンマに設定されている場合 (ドイツの地域設定など)、問題が発生するようになりました。ズームする四角形のパラメーターが正しく解釈されないようです。
ProcessMonitor を使用したところ、Adobe ActiveX コントロールが作成され、その DLL がプロセスに読み込まれると、setlocale が呼び出されるため、アプリケーションはデフォルトの「C」ロケールではなく、現在の Windows 地域設定を使用していることを発見しました。したがって、アプリケーションは数値を間違った方法で解釈します。
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 で既に設定されているロケールには影響しません。
アプリケーション内でホストしている COM オブジェクトのロケールを設定する方法はありますか?
事前にどうもありがとう:)