|
|
|
Замена 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 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=223&tid=2163561]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 366ms |

| 0 / 0 |
