Miguel Altamirano Morales Ответов: 2

Как заменить DLL на новую версию самой себя


Всем привет; С Новым Годом всех читателей и членов клуба !!.

На самом деле я работаю со старым и незаконченным проектом, разработанным с помощью Access 2010 (пожалуйста, не спрашивайте меня почему, я даже никогда раньше не работал с этой платформой).

Поставщик снабдил нас парой новых библиотек DLL, которые заменяют старые, с тем же именем (id) и почти с той же функциональностью.

Я просто скопировал и заменил новые в папку, где они были установлены, я не добавил в проект ссылки, потому что они уже есть (ну и старые).

Когда я запускаю код (VBA), он хорошо создает новый объект класса, но при первой попытке присвоить значение одному из его членов программа терпит неудачу и посылает мне сообщение об ошибке "компонент Activex не может создать объект". Ошибка номер 429.

Я был бы очень признателен вам за помощь. Я знаю, что должен продолжать искать ответ через интернет, но мне бы очень хотелось сэкономить время.

Что я уже пробовал:

Я искал в google и увидел, что проблема может заключаться в том, что новые библиотеки DLL не зарегистрированы в реестре windows, поэтому я пытался настроить их с помощью команды regsvr32; но я получаю много сообщений об ошибках; точно так же, как если бы мой пароль windows не имел прав администратора.

Персонал систем (который знает об этом меньше меня) заверил меня, что у a действительно есть такие привилегии.

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Они основаны на COM .файл DLL. Вы должны перерегистрировать их с помощью REGSVR32, который принимает права администратора на машине.

Не зная сообщений об ошибках, невозможно сказать вам, что происходит.


Miguel Altamirano Morales

Привет, Дэйв, большое спасибо за ваш ответ.

Команда такая: (без кавычек или с ними ответ один и тот же)

команду regsvr32 C:\Windows\Syswow64\ProductosTransitorios.dll

И ответ примерно такой (это по-испански):

"Модуль был загружен, но точка входа "DllRegister Server не была найдена"

или когда я ввожу команду regsvr32 "C:\Archivos de Programa(x86)\Common Files\microsoft shared\DAO\dao360.dll"

"Указанный модуль не найден".

Люди в системной области говорят мне, что пароль windows, который у меня есть, имеет необходимое разрешение на это; и я даже запускаю его через MS DOS в качестве администратора.

Dave Kreskowiak

Итак, первое сообщение означает, что это не COM-библиотека .DLL, а обычная библиотека .DLL. Вы не можете установить ссылку на это. Он должен быть загружен и доступен через P/Invoke. Эти строки кода описываются следующим образом этот[^].

DAO-это действительно старая технология доступа к базам данных, которая давным-давно устарела. Почему ты до сих пор им пользуешься-выше моего понимания.

Файл .DLL, который вы пытаетесь зарегистрировать, требует присутствия других файлов .DLL для работы. DAO был частью нескольких пакетов, но уже давно не распространялся. Вы можете прочитать больше о том, как заставить эту штуку работать и работать от здесь[^].

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

Miguel Altamirano Morales

Да, Дэйв; я очень хорошо знаю, что эта технология DAO очень стара; и я уже говорил об этом своим клиентам, но они просто хотят, чтобы я исправил эту старую систему, разработанную с access 2010; они очень ... (ну, я не хочу оскорблять их, скажем "неохотно". Я делаю это только ради денег, они мне просто очень нужны). Я пытаюсь убедить их разработать новую систему, но, вы знаете, они хотят сначала увидеть некоторые результаты. Они потратили много денег и времени на этот проект.

Большое спасибо за рекомендации; я собираюсь изучить их после обеда.

Салюдос, Дэйв !!!

Рейтинг:
0

Maciej Los

Я бы посоветовал вам прочитать это: Компонент ActiveX не может создать объект[^Там вы найдете 5 причин, которые могут вызвать такое сообщение об ошибке.

Другая причина...
Иногда, когда база данных MS Access используется на рабочих станциях (компьютерах) без полной версии MS Access, может потребоваться переустановка (ремонт) Среда выполнения MS Access 2010[^].

Вы должны предоставить более подробную информацию о ваших библиотеках DLL. Не зная его названий версий и т.д., Мы не можем вам помочь...


Miguel Altamirano Morales

Большое спасибо Maciej: первая ошибка (моя, конечно): одна из библиотек DLL, о которой я упоминал, "DAO360.dll-выходит из этой проблемы. Библиотека dll, которую использует этот проект, - это "ACEDAO.dll", и он находится на "Microsoft Office 14 Access database engine object library2" и работает нормально. Я прошу прощения.

Другая dll-это "ручная работа" (просто чтобы сказать что-то, это не COM-библиотека), разработанная нашим поставщиком, уже включена в список ссылок проекта, я просто заменил ее в папке, где она должна быть. У меня нет доступа к коду; я просто вижу свойства и методы через обозреватель объектов.

Может ли команда gacutil быть полезной при этом ?. Проект старый; разработан с Access 2010

Maciej Los

"Ручная" библиотека dll должна быть COM-библиотекой DLL, если она должна работать с базой данных MS Access. Другого выхода нет!
Пожалуйста, свяжитесь с предыдущим разработчиком (провайдером, продавцом), чтобы получить подробную информацию о таком старом проекте.