1

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 オブジェクトのロケールを設定する方法はありますか?

事前にどうもありがとう:)

4

1 に答える 1

0

これは暗闇の中でのショットですが、MSVCR90.dll をロードしてみてくださいLoadLibrary(DLL は既にロードされているため、ハンドルが提供されるだけで、2 回ロードされることはありません)。次に、ポインターを見つけます。で setlocale 関数にGetProcAddress。次に、この DLL の setlocale 関数を呼び出すことができます。これは醜いハックですが、うまくいくかもしれません。

于 2012-07-25T12:09:58.423 に答える