AxAcroPDF - Vista64类未注册错误

8
我们有一个使用C#编写的WinForms应用程序,使用AxAcroPDFLib.AxAcroPDF组件加载和打印PDF文件。在Windows XP中一直运行良好。我将开发环境迁移到了Vista 64位,但是现在除非我删除AxAcroPDF组件,否则该应用程序将无法在Vista 64位上运行。当应用程序运行时,会出现以下错误:
“System.Runtime.InteropServices.COMException:未注册类(HRESULT:0x80040154(REGDB_E_CLASSNOTREG)的异常)。”
我在Adobe论坛上得到的建议是,导致错误的原因是他们没有64位版本的AxAcroPDF ActiveX控件。
是否有解决此问题的方法?例如,我能否自己将32位ActiveX控件转换为64位控件?
3个回答

14

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

有关您使用的Visual Studio版本的说明,请参见Issues When Using Microsoft Visual Studio 2005第1.44节。


下面是seaman.myopenid.com的回答,提供了更多细节 - daveywc

6

.Net框架1.1始终针对32位CPU,而.Net框架2.0及以上版本可以根据程序清单的processorArchitecture属性(由Visual Studio IDE的“平台目标”选项更改)来针对32位或64位。使用默认选项“任何CPU”,IL代码将根据平台编译,但如果平台为64位,则对AxAcroPDF 32位组件的COM调用将失败。只需重新构建EXE以仅针对32位平台即可。在Vista 64位中,WOW64模拟器可以很好地解决这个问题。


0

使用DLL隔离,适用于每个32位COM+应用程序。更多信息请参见: http://support.microsoft.com/kb/281335

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

64位应用程序在HKLM\Software\Classes搜索已安装的COM+对象,但32位应用程序使用HKLM\Software\WOW6432\Classes。


DLL隔离是否适用于ActiveX控件?我认为你只能在隔离中创建非可视组件。如果可以的话,根据对控件的调用次数和性质与部署麻烦/32位减速之间的关系,这可能是更好的解决方案。 - rpetrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接