我们有一个用C#编写的WinForms应用程序,它使用AxAcroPDFLib.AxAcroPDF组件来加载和打印PDF文件。在Windows XP中一直没有任何问题。我已将我的开发环境移至Vista 64位,现在应用程序将无法运行(在Vista 64上),除非我删除了AxAcroPDF组件。应用程序运行时出现以下错误:
“System.Runtime.InteropServices.COMException: 未注册的类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))。“
我在Adobe论坛上被告知错误的原因是他们没有64位版本的AxAcroPDF ActiveX控件。
有没有解决这个问题的方法?例如,我可以自己将32位ActiveX控件转换为64位控件吗?
答案 0 :(得分:14)
您无法自己将Adobe的ActiveX控件转换为64位,但您可以通过将平台目标设置为x86来强制您的应用程序以32位模式运行。
有关您的Visual Studio版本的说明,请参阅Issues When Using Microsoft Visual Studio 2005
的第1.44节答案 1 :(得分:6)
.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仿真器。
答案 2 :(得分:0)
使用DLL隔离,适用于每个32位COM +应用程序。更多信息请访问: http://support.microsoft.com/kb/281335
使用此解决方案,您可以将32位COM +应用程序隔离到单独的32位进程中。
64位应用程序搜索已安装的COM +对象:HKLM \ Software \ Classes,但32位应用程序使用HKLM \ Software \ WOW6432 \ Classes