8

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

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

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

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

4

3 回答 3

14

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

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

于 2008-09-16T06:39:31.200 回答
6

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

于 2008-09-17T17:38:36.020 回答
0

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

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

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

于 2008-09-16T06:43:36.243 回答