質問

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 ビット コントロールに変換できますか?

役に立ちましたか?

解決

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

Visual Studio のバージョンに応じた手順については、次のセクション 1.44 を参照してください。 Microsoft Visual Studio 2005 使用時の問題

他のヒント

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top