8

AxAcroPDFLib.AxAcroPDF コンポーネントを使用して PDF ファイルを読み込んで印刷する C# で記述された WinForms アプリケーションがあります。Windows XP で問題なく動作しています。開発環境を Vista 64 ビットに移行しましたが、AxAcroPDF コンポーネントを削除しない限り、(Vista 64 で) アプリケーションが実行されません。アプリケーションの実行時に次のエラーが発生します。

「System.Runtime.InteropServices.COMException: クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))」。

Adobe フォーラムで、エラーの理由は、AxAcroPDF ActiveX コントロールの 64 ビット バージョンがないことが原因であるとアドバイスを受けました。

この問題を回避する方法はありますか? たとえば、自分で 32 ビット ActiveX コントロールを 64 ビット コントロールに変換できますか?

4

3 に答える 3

14

Adobe の ActiveX コントロールを自分で 64 ビットに変換することはできませんが、プラットフォーム ターゲットを x86 に設定することで、アプリケーションを強制的に 32 ビット モードで実行することができます。

お使いのバージョンの Visual Studio の手順については、「 Microsoft Visual Studio 2005 を使用する場合の問題」のセクション 1.44 を参照してください。

于 2008-09-16T06:39:31.200 に答える
6

.Net Framework 1.1 は常に 32 ビット CPU をターゲットにしていますが、.Net Framework 2.0 以降は、Visual Studio IDE の「プラットフォーム ターゲット」オプションによって変更されたプログラム マニフェストの processorArchitecture プロパティに従って、32 ビットまたは 64 ビットをターゲットにすることができます。デフォルトのオプション「Any CPU」を使用すると、IL コードはプラットフォームに従ってコンパイルされますが、プラットフォームが 64 ビットの場合、もちろん AxAcroPDF 32 ビット コンポーネントへの COM 呼び出しは失敗します。EXE を再構築して、32 ビット プラットフォームのみをターゲットにするだけです。これは、Vista 64 ビットの WOW64 エミュレーターで問題なく動作します。

于 2008-09-17T17:38:36.020 に答える
0

DLL 分離を使用し、すべての 32 ビット COM+ アプリケーションで動作します。詳細については、 http ://support.microsoft.com/kb/281335 を参照してください。

このソリューションを使用すると、32 ビット COM+ アプリケーションを別の 32 ビット プロセスに分離できます。

64 ビット アプリケーションは、インストールされている COM+ オブジェクトを HKLM\Software\Classes で検索しますが、32 ビット アプリケーションは HKLM\Software\WOW6432\Classes を使用します。

于 2008-09-16T06:43:36.243 に答える