Vb6 &引用;无效的过程调用或参数";“上的错误”;新的ADODB.Connection“;仅当在Windows 7上编译时

Vb6 &引用;无效的过程调用或参数";“上的错误”;新的ADODB.Connection“;仅当在Windows 7上编译时,vb6,adodb,Vb6,Adodb,当我在VB6上编译一些遗留应用程序时,我遇到了一些问题,因为我在Windows7上有了一台新的开发机器。(我以前的版本是在Windows XP上。) 如果我在XP机器上编译项目,一切都很好。 如果我在我的Windows7机器上编译相同的项目,它仍然可以正常运行,但是如果我尝试在XP机器上运行它,我会遇到这个错误 错误编号:5 描述:过程调用或参数无效 由于我的错误处理程序,我知道引发此错误的行是: Dim objConn As ADODB.Connection --> Set ob

当我在VB6上编译一些遗留应用程序时,我遇到了一些问题,因为我在Windows7上有了一台新的开发机器。(我以前的版本是在Windows XP上。)

如果我在XP机器上编译项目,一切都很好。 如果我在我的Windows7机器上编译相同的项目,它仍然可以正常运行,但是如果我尝试在XP机器上运行它,我会遇到这个错误

错误编号:5
描述:过程调用或参数无效

由于我的错误处理程序,我知道引发此错误的行是:

    Dim objConn As ADODB.Connection
--> Set objConn = New ADODB.Connection
我比较了两台机器上的引用,并且
项目-引用
是相同的:(Microsoft ActiveX Data Objects 2.7库)

什么会导致此错误?

这是一个已知错误,将在SP2中修复

在SP1中处理该问题的方法是在
C:\ProgramFiles(x86)\Common Files\System\ADO
中从Win7 RTM复制旧的ADO typelib文件,并在那里注册

注册这个旧的ADO类型库并不像许多论坛线程所显示的那样是一项琐碎的任务。以下是我们在车间使用的批处理文件,用于修复ADO类型库问题:

@echo off
set regtlib="%windir%\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe"
set subinacl="%~dp0subinacl.exe"
set target_dir=%CommonProgramFiles%\System\ado
if not "%CommonProgramFiles(x86)%"=="" set target_dir=%CommonProgramFiles(x86)%\System\ado

copy "%~dp0msado28_old.tlb" "%target_dir%\msado28_old.tlb" > nul
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /setowner=Administrators > nul
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /grant=Administrators=F > nul
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /setowner=Administrators > nul
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /grant=Administrators=F > nul
%regtlib% -u "%target_dir%\msado28.tlb"
%regtlib% "%target_dir%\msado28_old.tlb"
对于
regtlibv12.exe
实用程序,您需要将这两个文件和.NET Framework 4.0安装程序放在与
install.bat
文件和.NET Framework 4.0安装程序相同的文件夹中

现在,您可以在Win7框上重新编译引用ADO的项目,而在以前版本的Windows上没有兼容性问题。

这是一个已知的错误,但我不认为这是一个错误;我认为出于安全原因,兼容性被破坏了。如果安装了一个SP1版本,则该问题可能存在于非SP1版本上。Microsoft知识库中引用了几个选项。下面是另一个更新


我们遇到了这个问题,我们决定在所有开发人员机器上部署向后兼容补丁,并用向后兼容引用替换所有遗留ADO引用。这对我们来说效果很好。

不确定,这有点奇怪,如果您将其修改为一行“Dim objConn As New ADODB.Connection”,会发生什么情况?我不怀疑您,但我很想看到一个链接,指向任何表示他们将在SP2中摆脱困境并修复此问题的内容。实际上,SP1应该被召回/重新发布。我不想看到Win7SP1还埋下了什么更微妙的错误。嗯,也许我应该关注你的链接,嗯?我看到了,但没有提到SP2,我会继续看,然后回来检查。他们恢复了2.x和6.0 typelib,并在Win8预览版中为x64(仅限VBA)开发提供了“不兼容”的6.1 typelib。我认为(在某处阅读)这些也将包含在Win7SP2中。只要Win7 RTM typelib还在工作,我基本上不在乎——我们正在使用Win2003作为构建服务器。我同意这样一个评论,即这个“解决方案”可能仍然会导致关于这个问题的无休止的一系列重新发布。我很高兴等待测试wqw的解决方案,Microsoft提供的2517589 kb的解决方案比从以前版本的windows中恢复旧文件更干净,因为它清楚地将新引用标识为向后兼容引用。再次感谢!因此,我知道您必须将项目引用更改为“向后兼容”类型库,然后在应用SP2后,您必须将它们更改回“常规”类型库。@wqw-我从未看到Microsoft的任何声明,说明这将在SP2中更改。你有链接吗?