我在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 )
什么可能导致此错误?
答案 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.tlb
和subinacl.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参考。这对我们来说效果很好。