仅在Windows 7上编译时,“New ADODB.Connection”上的“无效的过程调用或参数”错误

时间:2012-01-20 19:34:08

标签: vb6 adodb

我在VB6上编译一些遗留应用程序时遇到了一些问题,因为我在Windows 7中安装了一台新的开发机器。(我的旧机器在Windows XP上。)

如果我在我的XP机器上编译项目,一切都很好。 如果我在我的Windows 7机器上编译相同的项目,它仍然运行良好,但如果我尝试在XP机器上运行它,我得到了这个错误。

  

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

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

    Dim objConn As ADODB.Connection
--> Set objConn = New ADODB.Connection

我比较了两台机器上的引用,而Project - References是相同的:( Microsoft ActiveX Data Objects 2.7 Library

什么可能导致此错误?

2 个答案:

答案 0 :(得分:4)

这是一个已知的problem in SP1 for Win7,将在SP2中修复。

在SP1中处理问题的方法是从C:\Program Files (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"

您需要将msado28_old.tlbsubinacl.exe放在与install.bat文件相同的文件夹和regtlibv12.exe实用程序的.NET Framework 4.0设置中。

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

答案 1 :(得分:2)

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

我们遇到了这个问题,我们决定在所有开发人员计算机上部署Backwards Compatibility补丁,并使用Backwards Compatibility参考替换所有旧版ADO参考。这对我们来说效果很好。