2012-01-20 30 views
5

Tengo algún problema cuando compilo algunas aplicaciones heredadas en VB6 desde que obtuve una nueva máquina de desarrollo en Windows 7. (mi anterior estaba en Windows XP.)Error "llamada o argumento de procedimiento no válido" en "Nueva conexión ADODB" solo si está compilado en Windows 7

Si compilo el proyecto en mi máquina XP, todo está bien. Si compilo el mismo proyecto en mi máquina con Windows 7, aún funciona bien, pero si trato de ejecutarlo en una máquina con XP, aparece este error.

Número de error: 5
Descripción: Llamada a procedimiento o argumento no válido

Gracias a mi gestor de errores, sé que la línea que lanza este error es:

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

I comparó las referencias en ambas máquinas y Project - References son las mismas: (Microsoft ActiveX Data Objects 2.7 Library)

¿Qué podría causar este error?

+0

No estoy seguro, eso es un poco extraño, ¿qué ocurre si lo modificas en una sola línea "Dim objConn As New ADODB.Connection"? –

Respuesta

2

Este es un conocido Microsoft issue, pero no creo que haya sido un error; Creo que la compatibilidad se rompió por razones de seguridad. El problema podría haber existido en compilaciones que no sean SP1 si tenía instalado certain hotfix. Hay un par de opciones a las que se hace referencia en Microsoft KB. Aquí hay otro article que proporciona una actualización.

Nos encontramos con este problema y decidimos implementar el parche de Compatibilidad con versiones anteriores en todas las máquinas de desarrollo y reemplazar todas las referencias heredadas de ADO con la referencia de Compatibilidad con versiones anteriores. Esto ha funcionado bien para nosotros.

+0

Estoy feliz de haber esperado para probar la solución de wqw, la solución provista por Microsoft en el 2517589 kb es más * limpia * que recuperar archivos viejos de la versión anterior de Windows, ya que identifica claramente la referencia nueva como referencia de Compatibilidad con versiones anteriores. ¡Gracias de nuevo! – DavRob60

+0

Así que sepa que tiene que cambiar las referencias del proyecto a typelib "retrocompatible", y luego de que se aplique SP2, debe cambiarlas de nuevo a typelib "regular". – wqw

+0

@wqw - Nunca vi nada de Microsoft que indicara que esto se cambiaría en SP2. ¿Tienes un enlace? – UnhandledExcepSean

4

Este es un problem in SP1 for Win7 conocido que se solucionará en SP2.

La forma de manejar el problema en SP1 es copiar el archivo ADO typelib anterior de Win7 RTM en C:\Program Files (x86)\Common Files\System\ado y registrarlo allí.

El registro de este ADO typelib antiguo no es una tarea trivial ya que se han mostrado numerosos temas en el foro. Aquí es un archivo por lotes que utilizamos en nuestra tienda para fijar ADO biblioteca de tipos tema:

@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" 

Se necesitan las dos msado28_old.tlbsubinacl.exe y se coloca en la misma carpeta que el archivo install.bat y .NET Framework 4.0 configuración de la utilidad regtlibv12.exe.

Ahora puede recompilar sus proyectos haciendo referencia a ADO en el cuadro Win7 sin problemas de compatibilidad en versiones anteriores de Windows.

+0

Sin dudarlo, pero me encantaría ver un enlace a cualquier cosa que diga que se librarán de sus errores y arreglarán esto en SP2. Como es SP1 debería haber sido retirado/reeditado. Odio ver qué otros errores más sutiles Win7 SP1 ha enterrado en él. Hmm, tal vez debería seguir tu enlace, ¿eh? – Bob77

+0

Veo esto, pero no menciono el SP2, lo seguiré viendo y revisando aquí. 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

Revertieron 2.x y 6.0 typelibs y se enviaron 6.1 typelib "incompatibles" para x64 (solo VBA) desarrollo en Win8 Preview.Creo que (leer en algún lugar) estos se incluirán también en Win7 SP2. En general no me importa mientras Win7 RTM typelib esté funcionando, estamos usando Win2003 para nuestro servidor de compilación. – wqw

Cuestiones relacionadas