我们有一个用C#编写的WinForms应用程序,它使用AxAcroPDFLib.AxAcroPDF组件加载和打印PDF文件。已在Windows XP中正常工作,没有任何问题。我已经将我的开发环境迁移到Vista64位,现在应用程序将无法运行(在Vista64上),除非我删除AxAcroPDF组件。当应用程序运行时,我得到以下错误:
"System.Runtime.InteropServices.COMException:类未注册(来自HRESULT的异常: 0x80040154 (REGDB_E_CLASSNOTREG))。“
我在Adobe论坛上被告知,错误的原因是他们没有64位版本的AxAcroPDF ActiveX控件。
有什么办法可以解决这个问题吗?例如,我可以自己将32位ActiveX控件转换为64位控件吗?
发布于 2008-09-16 06:39:31
您不能自己将Adobe的ActiveX控件转换为64位,但您可以通过将平台目标设置为x86来强制您的应用程序在32位模式下运行。
有关您的Visual Studio版本的说明,请参阅Issues When Using Microsoft Visual Studio 2005的1.44节
发布于 2008-09-17 17:38:36
.Net Framework1.1总是以32位CPU为目标,而.Net Framework2.0和更高版本则可以以32位或64位为目标,这取决于由Visual Studio IDE的“平台目标”选项更改的程序清单的processorArchitecture属性。使用默认选项'Any CPU‘时,会根据平台编译IL代码,但如果平台是64位,则对AxAcroPDF 32位组件的COM调用当然会失败。只需将EXE重新编译为目标32位平台即可。这在Vista64位的WOW64仿真器中工作得很好。
发布于 2008-09-16 06:43:36
使用动态链接库隔离,适用于每个32位COM+应用程序。欲了解更多信息,请访问:http://support.microsoft.com/kb/281335
使用此解决方案,您可以将32位COM+应用程序隔离到一个单独的32位进程中。
64位应用程序在以下位置搜索已安装的COM+对象: HKLM\Software\Classes,但32位应用程序使用HKLM\Software\WOW6432\Classes
https://stackoverflow.com/questions/67167
复制相似问题