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

Вниз

Обработка ошибок при инициализации приложения   Найти похожие ветки 

 
NeyroSpace ©   (2006-02-14 10:40) [0]

Подскажите как наиболее оптимально написать код инициализации приложения.
Допустим последовательно открываются несколько файлов,  подключаются несколько DLL, выделается память. При попытке подключить очередную DLL она оказывается не найдена. Как наиболее оптимально написать процедуру отката уже произведенных действий?
Много вложенных try... excep...? Или может быть есть какие-нибудь хитрые приемы?


 
API   (2006-02-14 11:02) [1]

Много вложенных try... excep...?

Нормальное решение.
Правда, для "отката уже произведенных действий" напрашивается try..finally..end;
Но, вообще, при завершении приложения - системой высвобождается память, закрываются все файлы, выгружаются DLL, так что делать это "вручную" в "аварийном" случае - можно, но необязательно.

Частные случаи необходимо рассматривать отдельно.


 
NeyroSpace ©   (2006-02-14 12:59) [2]

В данном случае, дальнейшую инициализацию необходимо остановить, написать внятное сообщение об ошибке, а все что уже было создано/выделено/открыто разрушить/освободить/закрыть.


 
Digitman ©   (2006-02-14 13:10) [3]


> NeyroSpace ©   (14.02.06 12:59) [2]


Обрати внимание на ф-ции AddExitProc(), AddTerminateProc()


 
Гаврила ©   (2006-02-14 19:24) [4]

Вариант:
в конструкторе главной формы идет
- создание объектов
- загрузка библиотек, получение их handle"ов
в деструкторе разрушение объектов, выгрузка библиотек
по умолчанию память, выделенная под объект-главную форму, автоматически заполняется нулями
то есть все внутренние объекты у тебя равны nil, все handle"ы библиотек равны 0 к моменту входа в конструктор.
В деструкторе
если ты вызываешь
 FMyObject.Free;
а он был равен nil, то все идет в штатном порядке, это нормально
для handle"ов достаточно поставить проверку
if FMyDLLhandle <> 0 then
 FreeLybrary(FMyDLLhandle);
дальше (например)
в конструкторе ты при неудачной загрузке очередной DLL просто поднимаешь исключение
raise Exception.CreateFmt("Библиотека %s не найдена",[DllName]);
при возникновении исключения в конструкторе объекта автоматически вызывается деструктор
то есть все освобождения того, что уже было создано, проходят (см. выше)
ну и осталось снаружи окружить создание главной формы try-except"ом
в котором показать MessageBox с текстом исключения и вызвать Halt



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

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

Наверх




Память: 0.48 MB
Время: 0.044 c
11-1122376775
RA
2005-07-26 15:19
2006.03.19
Для чего это "Can not change font ..."?


15-1140603184
Старик
2006-02-22 13:13
2006.03.19
Информация по FoxPro


15-1140700169
Grom PE
2006-02-23 16:09
2006.03.19
Люди, посмотрите мои программы - для Вас делал.


15-1140978453
Volf_555
2006-02-26 21:27
2006.03.19
Какой посоветуете поставить форум в локальной сети?


2-1141158956
Foton
2006-02-28 23:35
2006.03.19
Почему не виден ресурс