AxAcroPDF - Vista64类未注册错误

问题描述:

我们有一个用C#编写的WinForms应用程序,它使用AxAcroPDFLib.AxAcroPDF组件加载和打印PDF文件。在Windows XP中一直没有任何问题。我已将我的开发环境移至Vista 64位,现在应用程序将无法运行(在Vista 64上),除非我删除AxAcroPDF组件。当应用程序运行时出现以下错误:AxAcroPDF - Vista64类未注册错误

“System.Runtime.InteropServices.COMException: 未注册的类(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))。”

我在Adobe论坛上被告知,错误的原因是他们没有64位版本的AxAcroPDF ActiveX控件。

有没有办法解决这个问题?例如,我可以将32位ActiveX控件自己转换为64位控件吗?

您无法将Adobe的ActiveX控件自己转换为64位,但可以通过将平台目标设置为x86来强制应用程序以32位模式运行。

为您的Visual Studio版本的说明,请参见Issues When Using Microsoft Visual Studio 2005

+0

下面的seaman.myopenid.com的答案是相同的,但提供了更多的细节 – daveywc 2008-09-17 22:00:24

使用DLL隔离部分1.44,每32位COM +应用程序的工作。更多详情,请参阅: http://support.microsoft.com/kb/281335

使用此解决方案,您可以将32位COM +应用程序隔离为单独的32位进程。

64位应用程序搜索在安装COM +对象:HKLM \ Software \ Classes下,但32位应用程序使用HKLM \ SOFTWARE \ WOW6432 \类

+0

DLL隔离与ActiveX控件一起工作吗?我的印象是,你只能孤立地创建非可视化组件。如果可以的话,这可能是一个更好的解决方案,具体取决于调用控件与部署ha/32位减速的次数和性质 – rpetrich 2008-09-18 08:22:31

在.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模拟器。