Как выгружать DLL насильно?
А для чего нужно?
Я пишу софтину, половина которой - на Дельфи, другая - на фортране (что, делать, так сказано... в ТЗ...
)
И сейчас у меня, похоже, та проблема, что dll не загружается заново в память (после соответствующей компиляции и сборки видимо винде показалось достаточным туда ее один раз загрузить.
)И сейчас у меня, похоже, та проблема, что dll не загружается заново в память (после соответствующей компиляции и сборки видимо винде показалось достаточным туда ее один раз загрузить.
А нет, кажется разобрался...
Но все равно интересно (насчет утилиты
)
Но все равно интересно (насчет утилиты
И еще, может кто подскажет:
если программа закончила выполнение (в среде разработки или отдельно от нее можно ли перезаписать на диске dll, которую она использовала? У меня система этого делать не хочет, говорит:
"Запрошенную операцию нельзя выполнить для файла с открытой пользователем сопоставленной секцией" (это Far такое выдает). Что бы это значило?
если программа закончила выполнение (в среде разработки или отдельно от нее можно ли перезаписать на диске dll, которую она использовала? У меня система этого делать не хочет, говорит:
"Запрошенную операцию нельзя выполнить для файла с открытой пользователем сопоставленной секцией" (это Far такое выдает). Что бы это значило?
Tweak XP
такая утилита.
Кроме того, если твоя программа компонуется совсем динамически (LoadLibrary то можно сделать UnloadLibrary в конце.
такая утилита.
Кроме того, если твоя программа компонуется совсем динамически (LoadLibrary то можно сделать UnloadLibrary в конце.
а у тебя DLLка висит отдельным тредом или процессом?
если процессом - то его наверное надо килять ручками перед окончанием работы программы
если процессом - то его наверное надо килять ручками перед окончанием работы программы
Спасибо, поищу...
Есть freelibrary в конце, это не то же самое?
Есть freelibrary в конце, это не то же самое?
ммм.... Загружал ее с помощью loadlibrary при инициализации программы (в конструкторе одного из объектов). С помощью freelibrary освобождаю ее в деструкторе объекта. Использую ее как в основной нити программы, так и в отдельном треде (программа многопоточная).
Видимо, получается, что я ее загружаю в том же треде, что и основной тред программы, так?
Видимо, получается, что я ее загружаю в том же треде, что и основной тред программы, так?
хз
я дельфи не знаю толком
я дельфи не знаю толком
А есть утилита не под XP? Свою XP я уже снес, сейчас Win2k?..
Cтранно, если LoadLibrary and FreeLibrary, то грузиться dll должна при LoadLibrary заново. А ты уверен, что dll, которую ты билдишь и dll, которую ты грузишь - это одна dll? По идее, грузится первая попавшаяся (в текущей директории и дальше по путям поэтому если существует несколько одноименных dll'ей, то может случиться недоразумение.. Во избежание лучше билдить dll в ту же директорию, что и екзешник.
Это все тривиально, но бывает и такое ;-)
Это все тривиально, но бывает и такое ;-)
Да, все сказанное верно. С этим я разобрался - оказалось, что запутался я в своих dll и не ту из них подменял 
Но другая проблема осталась: не могу перезаписать на диск dll, пока не закрою среду разработки (Delphi 6) - это даже при том, что программа уже завершила выполнение. Far выдает сообщение, о котором я говорил выше (я это сообщение первый раз в жизни вижу, честно говоря...
) Закрываю среду - все ок. Чудеса! 
Но другая проблема осталась: не могу перезаписать на диск dll, пока не закрою среду разработки (Delphi 6) - это даже при том, что программа уже завершила выполнение. Far выдает сообщение, о котором я говорил выше (я это сообщение первый раз в жизни вижу, честно говоря...
Да чудесами программеры не обделены! Помнится у меня как-то некоторые одинаковые файлы-исходники были заняты как в екзешнике, так и в dll, которой exe пользовался. Файлы поменял, exe перебилдил, а dll - забыл. Отлаживаю, типа, летит из dll exception, смотрю - ИЗ КОММЕНТАРИЕВ летит! Я просто офигел от такого нахальства....
Красиво 

С VB тоже самое. Visual среды не рулят, короче.
Оставить комментарий
Djet
субж? Посоветуйте, плиз!Надо иметь возможность выгружать старые версии dll из памяти для того, чтобы загружать туда новые версии этой же dll (специфика такая желательно без перезагрузки компа (так каждый сможет
Может есть утилитка какая?