AxAcroPDF-Vista64类未注册错误

时间:2020-03-05 18:54:36  来源:igfitidea点击:

我们有一个用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位控件吗?

解决方案

回答

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

有关Visual Studio版本的说明,请参阅"使用Microsoft Visual Studio 2005时的问题"的1.44节

回答

使用DLL隔离,可与每个32位COM +应用程序一起使用。更多信息请访问:
http://support.microsoft.com/kb/281335

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

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

回答

.Net Framework 1.1始终以32位CPU为目标,而.Net Framework 2.0及更高版本可以根据由Visual Studio IDE的" Platform Target"选项更改的程序清单的processorArchitecture属性来以32位或者64位为目标。
使用默认选项" Any CPU"时,将根据平台编译IL代码,但是如果平台为64位,则对AxAcroPDF 32位组件的COM调用当然会失败。
只需将EXE重建为仅针对32位平台即可。在Vista 64位中的WOW64模拟器上可以正常工作。