|
|
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Привет всем! У меня такой вопрос... У меня есть программа, которая использует Dll. Время от времени программу надо обновлять. У длл у меня содержаться формы, рисунки. Как мне можно заменять Dll-файлы? Когда я пытаюсь сделать что-то вроде (Как я сделал с exe-шником) Код: plaintext 1. 2. Не получается заменить использующийся длл... что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 14:39 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Старую длл переименовать, новю записать, прогу перезапустить, старую стереть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 15:14 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Старую не получается переименовать! Я имею в виду во время работы программы надо всё это сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 15:24 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Если связывание раннее, то вообще забудь об этом. Если позднее, то перед ее использованием можно попробовать сделать LoadLibrary, а перед заменой FreeLibrary. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 15:52 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Проверил, этот способ работает, главное не забыть перед этим уничтожить все объекты этой dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 16:02 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 16:16 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Я делаю так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Но при выполнении FreeLibrary qqq мне выдаётся ошибка: несовпадение типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 16:46 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
А, да.. в модуле я написал Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 16:47 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
MorionСтарую не получается переименовать! Я имею в виду во время работы программы надо всё это сделать... У меня проверка и обновление компонентов делается маленькой утилиткой, которая потом стартует основную программу. Утилитка не привязана к конкретной программе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 17:01 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Н-да. Читать гугл не хотим. MorionНо при выполнении FreeLibrary qqq мне выдаётся ошибка: несовпадение типов.Аргумент какого типа принимает FreeLibrary? Что подсовываешь вместо него? AntonariyЕсли позднее, то перед ее использованием можно попробовать сделать LoadLibrary, а перед заменой FreeLibrary.Перед использованием означает в самом старте программы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 17:07 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Хм... Связывание - это когда необходимо присоеденить dll в окне Project->References? Но если это не сделать, тогда программа вообще отказывается работать... AndrF , в данном случае надо одной прогой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 17:30 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
А если вот так по глупому... :) Сделать пункт меню "Обновить длл" Нажимаем на менюху Закачиваем dll - ки в темповую папку Затем делаем батничек в котором dll - ки из темпа будут переписывать существующие Предпоследней строкой в батнике написать запуск самого приложения Последней строкой записать удаление самого батника и все Запуск батника повесить на событие выгрузки главной формы. Нажали меню - накачали библиотек - создали скрипт для замены (в виде батника) - выгрузили приложение с запуском батника - батник заменил библиотеки - батник запустил прогу - батник замочил сам себя. С уважением, Николай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 17:46 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
MorionХм... AndrF , в данном случае надо одной прогой. Лично мне удобней иметь одну утилитку на кучу программ, чем засовывать ее в каждую программу. Да и смысл в последнем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 17:53 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
MorionХм... Связывание - это когда необходимо присоеденить dll в окне Project->References? Но если это не сделать, тогда программа вообще отказывается работать... Тогда забудь. Или делай с батником. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 18:00 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Morion, я так понял, это ActiveX DLL. Надо попробовать выгрузить DLL перед заменой файла. Для этого надо все ссылки на объекты из этой библиотеки убить (Set ЭкземплярОбъекта = Nothing), можно также попытаться выкинуть её из адресного пространства процесса (Private Declare Sub CoFreeUnusedLibraries Lib "ole32" ()), проконтролировав результат с помощью Dependency Walker . Кроме того, надо бы озаботиться разрегистрацией старой версии библиотеки и регистрацией новой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 10:52 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
А я так понял, что у него раннее связывание, поэтому все эти рекомендации не имеют смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 13:18 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Antonariy, должны иметь, если новые версии ActiveX DLL компилируются с опцией "Binary Compatibility" (как оно и должно быть, по-хорошему). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 15:17 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
БенедиктAntonariy, должны иметь, если новые версии ActiveX DLL компилируются с опцией "Binary Compatibility" (как оно и должно быть, по-хорошему). Antonariy прав - все эти рекомендации не имеют смысла, ибо при раннем связывании заменить эту библиотеку все равно не удастся, даже если поубивать все ссылки и вызвать CoFreeUnusedLibraries. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 16:30 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Бенедикт , а как разрегистрировать старую библ.? как регистрировать я вродь понял, а вот разрегистрировать... А не можешь немного рассказать о Binary Compatibility? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 16:41 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Может для разрегистрации подойдет такой код Код: plaintext С уважением, Николай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 17:36 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Или такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 17:44 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Antonariy, Melkiades, это мои мысли вслух. Конечно, следует провести эксперимент, чтобы убедиться (отчасти я такой эксперимент проводил с DAO, выкидывая её из памяти процесса на время, пока она не нужна, но без смены "на лету"). А что беспокоит вас? Morion, по binary compatibility можно почитать документацию по VB6 в старых версиях MSDN Library, или, вкратце, здесь . По (раз-)регистрации - либо дёрнуть явно соответствующую точку входа (один из способов см. во второй части кода, приведённого AndrF), либо вызвать regsvr32.exe с нужными ключами (при этом очень желательно дождаться окончания процесса регистрации). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 18:27 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Мда.. а не подскажите, как тогда сделать позднее связывание? Насколько я понял, так может что-то получиться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 19:05 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Morion, если DLL блокируется исполняющимся процессом, придётся выполнять вышеописанные танцы вне зависимости от вида связывания. IMHO :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2007, 10:41 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
При позднем связвании танцев меньше. Morion Если ты используешь события из этой библиотеке, то позднее связывание тебе не подойдет. Если нет, то нужно убрать галку из references, все объекты создавать через CreateObject, заменить типы на As Object, а константы их значениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2007, 11:32 |
|
||
|
Замена Dll
|
|||
|---|---|---|---|
|
#18+
Вообще-то события при позднем связывании можно вытащить через VBControlExtender http://support.microsoft.com/kb/190670 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 13:51 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2163561]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
93ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 450ms |

| 0 / 0 |
