64位上的PDFCreator和VB6:ActiveX组件无法创建对象

时间:2013-12-23 15:39:45

标签: vb6 activex windows-server-2008-r2

我正在使用PDFCreator在VB6中创建PDF。我的VB6开发VM是Windows XP 32位。在该系统上,PDF生成适用于桌面应用程序和ASP(通过VB Web类运行时)。

当我创建一个在Windows 7或Windows Server 2008 R2上运行的exe或在Web类运行时使用它时,我得到:

Run-time error '429':
ActiveX component can't create object

这是使用早期绑定时。我添加了一个项目引用“C:\ Program Files \ PDFCreator \ PDFCreator.exe”,然后在我的代码中我做:

Public WithEvents mPDFCreator As PDFCreator.clsPDFCreator
Set mPDFCreator = New PDFCreator.clsPDFCreator

如果我不使用项目引用并使用后期绑定,那么它可以在桌面应用程序上运行,但仍然不在Web类运行时中。后期绑定是这样完成的:

Set mPDFCreator = CreateObject("PDFCreator.clsPDFCreator")

我想使用早期绑定,以便我可以使用这些事件,而且我需要它在ASP / Web Class Runtime中工作。

我意识到我在这里处理古老的技术,在现代的64位Windows和IIS上运行这些东西时,我应该能够缓和期望。如果将这个遗留应用程序移植到.NET是一个选项,我会。

在IIS上,我在应用池上设置了启用32位应用程序设置。我也尝试以管理员身份运行它以排除安全问题。

我已经做了我知道如何调试这一切的所有内容,但我很难过。我怀疑它与PDFCreator是一个32位应用程序和COM注册有关。我也试过用SYSWOW64运行regsvr32但是无法注册PDFCreator.exe。

3 个答案:

答案 0 :(得分:0)

Windows 64位体系结构不允许将32位dll加载到64位进程中。

但是您可以修改vb项目的配置,将其从进程内的DLL组件转换为进程外的exe COM服务器。这将允许您从64位进程实例化32位组件。

请参阅Process Interoperability

答案 1 :(得分:0)

由于这是一个VB6问题,因此无需担心任何64位进程。

这个库似乎没有被正确注册的可能性。我没有使用它,因为我不知道它的设置是否正常。我知道下载本身不会在其图标上显示UAC Shield,本身就是可疑的。据我所知,安装程序会产生错误的regsvr32.exe。

但是,在将这些库裸露到这些64位Win7 / Server 2008系统之后,您似乎更有可能手动错误注册了该库。

在任何情况下,考虑到您描述的所有症状,我猜它已注册为32位ActiveX库,但在注册表的每用户虚拟化部分中注册为您登录的用户当你注册它时。

这可能是一个麻烦清理后。但是你应该,然后一定要再次手动运行原始设置 with elevation

这些线索包括对“古老技术”真正的烦恼。这是一个谴责他的工具的穷人。在未来,为什么不聘请有经验的程序员来处理这样的任务呢?

答案 2 :(得分:0)

我在用VB6编写的会计软件中使用PDFCreator。多年前,我注意到PDFCreator的制造商进行了某些更新后,我的软件停止了与它的正常工作。重新安装较旧的版本后,问题停止了,并且从中发布了另一个新更新时又回来了,因此我让客户冻结了可以使用的版本。我不知道到底是什么版本,但是我可以检查自己的网站,因为我可以将它下载给客户,如果有帮助的话,但是现在可能已经有很多年了。