Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.28;
Скачать: CL | DM;

Вниз

А не накроется что-нибудь, если..   Найти похожие ветки 

 
Alx2 ©   (2002-03-15 13:44) [0]

Если в модуле Forms вместо

finalization
if Application <> nil then DoneApplication;
if HintDoneEvent <> 0 then CloseHandle(HintDoneEvent);


написать

finalization
if Application <> nil then DoneApplication;
if HintDoneEvent <> 0 then CloseHandle(HintDoneEvent);
Application := Nil;


Вопрос возник, когда я загрузился порождением форм из DLL (навеяно обсуждавшимися здесь вопросами). В DLL переменную Application "в лоб" присвоил Application из основного приложения. Все окна (в т.ч. и модальные) корректно порождались, но при закрытии программы был AV. Убрал его указанным выше дополнением. Это сработало, так как сначала вызывалась секция Forms.finalization основного приложения, которая Application хоронила раньше, но не обнуляла. Но что-то мне боязно :)
Есть ли на то основания?


 
Alx2 ©   (2002-03-15 13:56) [1]

Сорри. Вопрос снят. Такой подход аукнится...


 
digitman ©   (2002-03-15 14:10) [2]

Что же мешает тебе написать Application := Nil в секции finalization собственного модуля (а не модуля Forms) ? Ведь при закрытии приложения сначала "выгружаются" все задействованные библ.модули, для каждого из выгружаемых модулей вызываются секции финализации unit"ов в порядке, обратном вызову секций инициализации. Т.е. если при загрузке библ.модуля иниц-ся сначала Forms, затем твой unit, то при выгрузке - unit, затем Forms. Так вот и помести Application := Nil в секцию finalization этого самого unit ! Тогда в DoneApplication в библиотечном экземпляре модуля Forms никогда не будет вызвана !


 
digitman ©   (2002-03-15 14:10) [3]

Что же мешает тебе написать Application := Nil в секции finalization собственного модуля (а не модуля Forms) ? Ведь при закрытии приложения сначала "выгружаются" все задействованные библ.модули, для каждого из выгружаемых модулей вызываются секции финализации unit"ов в порядке, обратном вызову секций инициализации. Т.е. если при загрузке библ.модуля иниц-ся сначала Forms, затем твой unit, то при выгрузке - unit, затем Forms. Так вот и помести Application := Nil в секцию finalization этого самого unit ! Тогда DoneApplication в библиотечном экземпляре модуля Forms никогда не будет вызвана !


 
Alx2 ©   (2002-03-15 14:15) [4]

А также не будет вызвана Application.Free из controls :(


 
digitman ©   (2002-03-15 14:24) [5]

Ничего подобного ! У хост-приложения и у DLL - собственные, совершенно отдельные сегменты данных, в которых находятся две совершенно независимых переменных типа TApplication.



Страницы: 1 вся ветка

Текущий архив: 2002.03.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
3-90753
tovSuhov
2002-03-01 13:27
2002.03.28
Запрос: группировка по времени


14-91050
Дмитрий
2002-02-14 11:48
2002.03.28
Мистика


1-90868
Juckser
2002-03-05 20:53
2002.03.28
Как сделать, чтобы при открытии Wave-файла запускалась моя программа, и MediaPlayer в ней, воспроизвел этот файл?


3-90777
roman001
2002-02-28 18:58
2002.03.28
Pack


4-91114
Delphi 5.01
2002-01-27 07:38
2002.03.28
Как вывести сообшения выбора папки только в котором видны и рабочий стол и все остальное в пиктогарамах ну такое сообшение кода драивер меняеш и предлагается выбрать папкуб ну вот точно такое окно нужно!