2012-01-20 2 views
5

Windows 7에서 새 개발 컴퓨터를 구한 이후 VB6에서 일부 레거시 응용 프로그램을 컴파일 할 때 약간의 문제가 있습니다. 내 옛날 것은 Windows XP에있었습니다.)Windows 7에서 컴파일 된 경우에만 "새 ADODB.Connection"에서 "잘못된 프로 시저 호출 또는 인수가 잘못되었습니다"오류가 발생했습니다.

XP 컴퓨터에서 프로젝트를 컴파일하면 모든 것이 정상입니다. Windows 7 컴퓨터에서 같은 프로젝트를 컴파일해도 여전히 제대로 작동하지만 XP 컴퓨터에서 실행하려고하면이 오류가 발생합니다.

오류 번호 : 5
설명 : 잘못된 프로 시저 호출 또는 인수

내 오류 처리기에

감사합니다, 나는이 오류를 던져 줄은 알고 :

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

I 두 기계 및 Project - References의 참조가 동일합니다. (Microsoft ActiveX 데이터 개체 2.7 라이브러리)

이 오류의 원인은 무엇입니까?

+0

잘 모르겠지만 약간 이상합니다. "Dim objConn As New ADODB.Connection"이라는 한 줄로 수정하면 어떻게됩니까? –

답변

2

이것은 알려진 Microsoft issue이지만 버그라고 생각하지 않습니다. 보안상의 이유로 호환성이 깨졌습니다. certain hotfix을 설치 한 경우 SP1이 아닌 빌드에 문제가있을 수 있습니다. Microsoft KB에서 참조 할 수있는 몇 가지 옵션이 있습니다. 업데이트를 제공하는 또 다른 article입니다.

이 문제가 발생하여 모든 개발자 컴퓨터에 이전 버전과의 호환성 패치를 배포하고 모든 이전 버전의 ADO 참조를 이전 버전과의 호환성 참조로 바꾸기로 결정했습니다. 이것은 우리를 위해 잘 작동했습니다.

+0

wqw의 솔루션을 테스트 한 것을 기쁘게 생각합니다. 2517589 kb의 Microsoft에서 제공하는 솔루션은 새로운 참조를 이전 버전과의 호환성 참조로 명확하게 식별하기 때문에 이전 버전의 Windows를 이전 버전의 파일로 구제하는 것보다 더 깨끗합니다. 다시 한 번 감사드립니다! – DavRob60

+0

프로젝트 참조를 "이전 버전과 호환되는"typelib로 변경해야한다는 것을 알고 있으면 SP2를 적용한 후에 다시 "일반"typelib로 변경해야합니다. – wqw

+0

@wqw - Microsoft에서 SP2에서 변경 될 것이라고 언급 한 내용은 본 적이 없습니다. 링크가 있습니까? – UnhandledExcepSean

4

이것은 알려진 problem in SP1 for Win7이며 SP2에서 수정 될 예정입니다.

SP1의 문제를 해결하는 방법은 Win33 RTM의 이전 ADO typelib 파일을 C:\Program Files (x86)\Common Files\System\ado에 복사하여 거기에 등록하는 것입니다.

수많은 포럼 스레드가 보여준 것처럼이 오래된 ADO typelib을 등록하는 것은 쉬운 일이 아닙니다. 여기에 우리가 우리의 가게에서 사용하는 배치 파일은 형식 라이브러리 문제 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.tlbregtlibv12.exe 유틸리티에 대한 install.bat 파일 및 .NET 프레임 워크 4.0 설치와 같은 폴더에 저장 subinacl.exe.

이전 버전의 Windows에서 호환성 문제없이 Win7 상자에서 ADO를 참조하는 프로젝트를 다시 컴파일 할 수 있습니다.

+0

의심의 여지가 없지만 나는 그들이 더프에서 벗어나 SP2에서 해결할 것이라고 말하는 것에 대한 링크를보고 싶습니다. SP1이 리콜되었거나 재발행 된 것입니다. 나는 Win7 SP1이 묻어 버린 또 다른 미묘한 실수에 대해 싫어한다. 음, 어쩌면 당신의 링크를 따라 가봐야할까요? – Bob77

+0

SP2는 언급이 없지만 계속보고 있습니다. 여기를 계속 살펴보고 다시 확인해 보겠습니다. http://blogs.msdn.com/b/psssql/archive/2011/10/03/yes-we-made-a-mistake-and-are-finally-going-to-fix-it.aspx – Bob77

+0

그들은 되돌 렸습니다. 2.x 및 6.0 형식 라이브러리 및 Win8 Preview의 x64 (VBA 전용) 개발 용 "호환되지 않는"6.1 형식 라이브러리를 제공합니다.내 생각에 (어딘가에) 이것들은 Win7 SP2에도 포함될 것입니다. Win7 RTM 형식 라이브러리가 작동하는 한 대부분은 신경 쓰지 않습니다. 우리는 Win2003을 빌드 서버로 사용하고 있습니다. – wqw