Как выгружать DLL насильно?

Djet

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

oleg701

А для чего нужно?

Djet

Я пишу софтину, половина которой - на Дельфи, другая - на фортране (что, делать, так сказано... в ТЗ... )
И сейчас у меня, похоже, та проблема, что dll не загружается заново в память (после соответствующей компиляции и сборки видимо винде показалось достаточным туда ее один раз загрузить.

Djet

А нет, кажется разобрался...
Но все равно интересно (насчет утилиты )

Djet

И еще, может кто подскажет:
если программа закончила выполнение (в среде разработки или отдельно от нее можно ли перезаписать на диске dll, которую она использовала? У меня система этого делать не хочет, говорит:
"Запрошенную операцию нельзя выполнить для файла с открытой пользователем сопоставленной секцией" (это Far такое выдает). Что бы это значило?

daru

Tweak XP
такая утилита.
Кроме того, если твоя программа компонуется совсем динамически (LoadLibrary то можно сделать UnloadLibrary в конце.

Coffin

а у тебя DLLка висит отдельным тредом или процессом?
если процессом - то его наверное надо килять ручками перед окончанием работы программы

Djet

Спасибо, поищу...
Есть freelibrary в конце, это не то же самое?

Djet

ммм.... Загружал ее с помощью loadlibrary при инициализации программы (в конструкторе одного из объектов). С помощью freelibrary освобождаю ее в деструкторе объекта. Использую ее как в основной нити программы, так и в отдельном треде (программа многопоточная).
Видимо, получается, что я ее загружаю в том же треде, что и основной тред программы, так?

Coffin

хз
я дельфи не знаю толком

Djet

А есть утилита не под XP? Свою XP я уже снес, сейчас Win2k?..

naska79

Cтранно, если LoadLibrary and FreeLibrary, то грузиться dll должна при LoadLibrary заново. А ты уверен, что dll, которую ты билдишь и dll, которую ты грузишь - это одна dll? По идее, грузится первая попавшаяся (в текущей директории и дальше по путям поэтому если существует несколько одноименных dll'ей, то может случиться недоразумение.. Во избежание лучше билдить dll в ту же директорию, что и екзешник.
Это все тривиально, но бывает и такое ;-)

Djet

Да, все сказанное верно. С этим я разобрался - оказалось, что запутался я в своих dll и не ту из них подменял
Но другая проблема осталась: не могу перезаписать на диск dll, пока не закрою среду разработки (Delphi 6) - это даже при том, что программа уже завершила выполнение. Far выдает сообщение, о котором я говорил выше (я это сообщение первый раз в жизни вижу, честно говоря... ) Закрываю среду - все ок. Чудеса!

naska79

Да чудесами программеры не обделены! Помнится у меня как-то некоторые одинаковые файлы-исходники были заняты как в екзешнике, так и в dll, которой exe пользовался. Файлы поменял, exe перебилдил, а dll - забыл. Отлаживаю, типа, летит из dll exception, смотрю - ИЗ КОММЕНТАРИЕВ летит! Я просто офигел от такого нахальства....

oleg701

Красиво

nataliagood

С VB тоже самое. Visual среды не рулят, короче.
Оставить комментарий
Имя или ник:
Комментарий: