![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выгрузка DLL с модально поднятой формой
Юрий Зотов © (2002-09-23 11:12:00)Программа однопоточная, с run-time пакетами (включая пакеты VCL). Есть BPL c объектами O1, O2 и формой F1. Загружена DLL с формой F2 - наследником F1. Метод ShowModal в F1 и в F2 не перекрыт (поскольку пока не ясно, нужно ли это делать и что в нем следует писать).
И есть цепочка вызовов:
O1.Method1-O2.Method2-F2.ShowModal
после которой вся эта цепочка, естественно, оказывается в стеке вызовов, а программа крутится во внутреннем цикле выборки сообщений ShowModal.
В этот момент иногда необходимо выгрузить DLL с F2. Само по себе это не сложно и после соответствующих мер доступность ранее показанных форм нормально восстанавливается, а программа нормально работает (правда, вызов ShowModal не завершен и его результат не получен, но в данном случае это неважно). Однако при завершении программы она делает попытку выйти из стека вызовов, а DLL уже выгружена. С соответствующими Access Violation и прочими чудесами.
Вопрос - есть ли у кого какие-то мысли по этому скорбному поводу? Разумеется, кроме банального гашения в try-except и мыслей типа "а на фига это нужно".
Дополнительная информация.
1. Допускаются любые изменения в BPL, но изменения в DLL весьма нежелательны (потому что таких DLL - порядка полусотни и перепахивать их все как-то очень не хочется).
2. Замена ShowModal на Show решает проблему в корне, но при обычной работе (без выгрузки DLL) программе нужен результат вызова. То есть, функция, а не процедура.
kerk (2002-09-23 11:24:00) [21]Обычно при выгрузки ДЛЛ должны уничтожатся все связанные с ней обекты, тогда точно не будет Access Violation.
Юрий Зотов (2002-09-23 11:17:00) [22]P.S.
> То есть, функция, а не процедура.
Или эмуляция вызова функции.