Ошибка «Недопустимый вызов процедуры или аргумент» в «New ADODB.Connection», только если она скомпилирована в Windows 7 - PullRequest
5 голосов
/ 20 января 2012

У меня возникла проблема при компиляции некоторых устаревших приложений на VB6, поскольку я получил новую машину для разработки в Windows 7. (моя старая была на Windows XP.)

Если я скомпилирую проект на моей машине с XP, все будет хорошо. Если я компилирую тот же проект на моей машине с Windows 7, он все равно работает нормально, но если я пытаюсь запустить его на машине с XP, я получаю эту ошибку.

Номер ошибки: 5
Описание: неверный вызов процедуры или аргумент

Благодаря моему обработчику ошибок я знаю, что строка, которая выдает эту ошибку:

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

Я сравнил ссылки на обеих машинах и Project - References одинаковы: ( Объекты данных Microsoft ActiveX 2.7 Библиотека )

Что может вызвать эту ошибку?

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Это известная проблема в SP1 для Win7 , которая будет исправлена ​​в SP2.

Способ решения проблемы в SP1 - скопировать старый файл ADO typelib из Win7 RTMв C:\Program Files (x86)\Common Files\System\ado и зарегистрируйте его там.

Регистрация этой старой библиотеки типов 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 и настройки .NET Framework 4.0 для утилиты regtlibv12.exe.

Теперь вы можете перекомпилировать свои проекты, ссылающиеся на ADO, в окне Win7 без проблем совместимости с предыдущими версиями Windows.

2 голосов
/ 23 января 2012

Это известная проблема Microsoft , но я не думаю, что это была ошибка;Я считаю, что совместимость была нарушена по соображениям безопасности.Проблема могла существовать в сборках не-SP1, если у вас установлено определенное исправление .В Microsoft KB есть несколько параметров.Вот еще одна статья , предоставляющая обновление.

Мы столкнулись с этой проблемой и решили развернуть исправление обратной совместимости на всех компьютерах разработчика и заменить все устаревшие ссылки ADO ссылкой обратной совместимости.Это хорошо сработало для нас.

...