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

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

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

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

有帮助吗?

解决方案

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

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

其他提示

.Net Framework 1.1 始终以 32 位 CPU 为目标,而 .Net Framework 2.0 及更高版本可以根据 Visual Studio IDE 的“平台目标”选项更改的程序清单的processorArchitecture 属性以 32 位或 64 位为目标。使用默认选项“任何 CPU”时,IL 代码根据平台进行编译,但如果平台是 64 位,则对 AxAcroPDF 32 位组件的 COM 调用当然会失败。只需重建 EXE 以仅针对 32 位平台。这在 Vista 64 位中的 WOW64 模拟器上运行良好。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top