Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

выгрузка dll [D6, WinXP]


Oleg_ ©   (2005-08-02 14:38:00) 

Ситуация следующая:
Для открытия немодальной формы из dll использую асинхронную развязку т.е. гружу библиотеку, нахожу адрес и пускаю функцию, открывающую немодальную форму. Одновременно передаю указатель на функцию в основной программе, которая должна будет (после закрытия немодальной формы) через  сообщение (асинхронно) вызвать выгрузку dll.
Так вот после всей этой конструкции закрытие основного приложения вызывает ошибку access violetion. Если же выгрузку dll комментирую все ок.
В чем может быть дело?


Гаврила   (2005-08-02 19:47:00) [1]

Приведи код. Ошибка, видимо, в другом месте


Oleg_   (2005-08-02 19:00:00) [2]

В dll application.handle не приравнивался основному application.handle  , на панели задач при этом видны две разные задачи. В dll используется только свой application


Ega23   (2005-08-02 17:56:00) [3]

Или в длл остались ссылки на Application


Oleg_   (2005-08-02 17:43:00) [4]

Там всего то ссылок 5 штук, все об nil-ил. А чудес действительно не бывает, согласен.


Ega23   (2005-08-02 16:47:00) [5]

Значит где-то у кого-то остались какие-то ссылки на dll. Чудес-то не бывает.


Oleg_   (2005-08-02 16:33:00) [6]

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


Ega23   (2005-08-02 15:47:00) [7]

А если в общем, то я бы не стал так делать...


Defunct   (2005-08-02 15:45:00) [8]

Oleg_   (02.08.05 14:38)  

Дело в том, что вызываете вы эту некую функцию внутри dll, ее отработка приводит к выгрузке кода dll из памяти процесса, и когда происходит возврат вы попадаете уже в область памяти, которая не принадлежит вашему процессу.

Как сделать правильно? Очень просто: передавать DLL-ке не указатель на функцию, а Handle например главной формы, и при закрытии DLL формы посылать какое-то свое сообщение (сторого с помощью PostMessage) окну с этим Handle'ом.


Наверх

Титульная страница Поиск, карта сайта Написать письмо