自从我在 Windows 7 中获得了一台新的开发机器以来,当我在 VB6 上编译一些遗留应用程序时,我遇到了一些问题。(我的旧机器运行在 Windows XP 上。)
如果我在我的 XP 机器上编译该项目,一切都很好。
如果我在 Windows 7 计算机上编译相同的项目,它仍然运行良好,但如果我尝试在 XP 计算机上运行它,则会出现此错误。
错误编号:5
描述:无效的过程调用或参数
感谢我的错误处理程序,我知道引发此错误的行是:
Dim objConn As ADODB.Connection
--> Set objConn = New ADODB.Connection
我比较了两台机器上的参考资料Project - References
是相同的 : (Microsoft ActiveX 数据对象 2.7 库)
什么可能导致此错误?
这是一个已知的Win7 SP1 的问题 http://connect.microsoft.com/VisualStudio/feedback/details/646313/ado-programs-no-longer-work-on-customer-computers-after-recompiled-on-a-windows-7-sp1-machine这将在 SP2 中修复。
SP1中处理该问题的方法是将旧的ADO typelib文件从Win7 RTM复制到C:\Program Files (x86)\Common Files\System\ado
并在那里注册。
正如许多论坛主题所表明的那样,注册这个旧的 ADO 类型库并不是一项简单的任务。这是我们在商店中用来修复 ADO typelib 问题的批处理文件:
@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 http://dl.unicontsoft.com/upload/msado28_old.zip and 放置在与install.bat
文件和 .NET Framework 4.0 设置regtlibv12.exe
公用事业。
现在,您可以在 Win7 机器上重新编译引用 ADO 的项目,而不会在以前版本的 Windows 上出现兼容性问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)