2012-03-09 111 views
1

我有一个在WinXP 32位系统上开发的VB6 COM DLL。它可以在C#,VB6和Python应用程序的PC上正常工作。我正在测试另一个WinXP 32位系统和Win7 32位和64位上的DLL。 Python程序在任何系统上运行良好。 VB6程序给出'错误429:ActiveX组件不能创建对象'。无法使用VB6程序创建对象VB6 COM DLL使用VB6程序

Dim foo As testdll.Class1 
MsgBox (1) 
Set foo = New testdll.Class1 
MsgBox (2) 

程序看到的dll,由于第一MSGBOX显示正常,但试图创建一个对象后,第二个没有。有任何想法吗?

+0

第一个'MsgBox'不能证明应用程序能看到dll。 'Dim'没有任何操作,所以没有任何东西被测试,没有任何信息从第一个'MsgBox'之前的dll被执行并且没有执行代码。 – wqw 2012-03-10 11:53:29

+0

如果该DLL未注册,则第一个msgbox无法显示。 – tosa 2012-03-14 01:22:10

+0

不正确,只是测试它。除非在第一个'MagBox'爆炸之前你有其他代码。 – wqw 2012-03-14 12:12:30

回答

1

Python脚本可能通过ProgId创建后期绑定的实例。我的猜测是你没有维护这个DLL的二进制兼容性,所以ClassId值已经改变,导致早期绑定的客户端代码(如VB6客户端)出现问题。

+0

如何在DLL中维护二进制兼容性?或者我如何将它延迟绑定到VB6客户端? – tosa 2012-03-10 00:51:58

+1

您可能会先阅读http://support.microsoft.com/kb/161137,但文档中有更多详细信息。后期绑定是将对象声明为对象以及使用CreateObject()而不是New的组合。 – Bob77 2012-03-10 01:30:40

+0

谢谢;我现在在所有系统上都能使用它。 – tosa 2012-03-14 01:22:42

0

很有可能.dll对某些其他dll有依赖性,这在非开发机器上是不存在的。您可以使用dependency walker进行检查。

第一行代码不会引发错误并不是很奇怪:在这一行中,Class1没有初始化,在第二行。所以检查Class_Initialise方法调用其他dll的。

+0

可能是这种情况,但为什么DLL会与Python一起工作? – tosa 2012-03-10 00:44:27