如果我在Win7上编译VB6应用程序,ADODB.Connection会出现“类不支持自动化或不支持预期接口”的错误。

20

类不支持自动化或不支持所期望的接口

我在我的Win7 x64机器上编译了一些VB6代码,生成的.exe文件在任何其他机器上都无法正确运行。

VB6代码只是一个带有一个按钮和对"Microsoft ActiveX Data Objects 2.6 Library"的引用的新模板.exe文件,并具有以下代码在按钮按下事件中:

Dim db
Set db = New ADODB.Connection

我的电脑上程序可以正常运行,但在其他机器上(包括其他Win7 x64机器)都不能运行(更新:我找到了两个其他用户,他们的机器可以运行,其中一个是Jeff Atwood!但大多数机器都存在同样的问题)。

我检查了两台机器上的引用屏幕,看是否有引用失败(那样的话就无法编译,但现在它编译得很好)。一切看起来都是真实的。在64位机器上,引用进入SysWow64而不是system32。

我甚至在Vista 64位机器上成功编译并正确运行过这个程序。只有在Windows 7上编译然后在任何其他机器上运行时才会出现错误。

这是在我的计算机上运行CompChecker的结果:

comp checker results on box

注册表信息:ADODB.Connection具有GUID HKEY_CLASSES_ROOT\CLSID{00000514-0000-0010-8000-00AA006D2EA4}

InprocServer32为%CommonProgramFiles%\System\ado\msado15.dll


这很奇怪,它在Vista上可以运行,但在Windows 7上却不能...你是否尝试禁用UAC或以显式“管理员身份运行”的方式来运行它? - Jeff Atwood
@jeff Win2003没有UAC或任何类似的功能...问题出在win2k3上。在win7上编译的应用程序在win7上运行良好。 - Michael Pryor
2个回答

18

这是一个Windows 7 SP1的问题。请参考http://support.microsoft.com/kb/2517589获取解决方法。

还有其他方法可以解决这个问题:

  1. 使用ADO 2.8代替(来自Win 7 RTM光盘)
  2. 使用后期绑定(可能是最简单的方法)
  3. 在这个很长和愤怒的帖子中,有许多人尝试了成千上万种方法:Breaking change in MDAC ADODB COM components in Windows 7 Service Pack 1

另外,还有一个注意点,msado15.dll在x64 Win 7上不被支持,详见http://support.microsoft.com/kb/983246。这是一篇较大的页面,请搜索msado15.dll


1

使用此工具检查两台机器上MDAC组件的版本。

同时确保您正在使用相同版本的SQL Server数据库(猜测),因为我注意到使用VB6时,SQL Server 2008 x64在处理连接方面与之前的版本有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接