Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#31: 2018-11-27 00:02:35 ЛС | профиль | цитата
Вообще-то, StrList.Free тоже надо БЫ страховать от исключений

Как бы я попытался объединить все эти соображения в том коде что привел выше (в качестве примера, пост #25).
Посмотрите еще раз.

Редактировалось 3 раз(а), последний 2018-11-27 00:09:49
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#32: 2018-11-27 00:04:02 ЛС | профиль | цитата
Galkov писал(а):
Вообще-то, StrList.Free тоже надо страховать от исключений

Да, ты прав, я как-то не подумал о том, что исключение может вылезти еще где-то.
карма: 22

0
Ответов: 2193
Рейтинг: 673
#33: 2018-11-27 00:07:07 ЛС | профиль | цитата
Тогда так:

procedure THIini._work_doSectionNames;
var StrList:PStrList;
I:integer;
begin
Open(_Data,ifmRead);
StrList := NewStrList;
Ini.GetSectionNames(strList);
Ini.Free;
TRY
for i := 0 to strList.Count-1 do
_hi_OnEvent(_event_onSectionNames,strList.Items[i]);
FINALLY
strList.free;
END
end;
карма: 10

0
Ответов: 9906
Рейтинг: 351
#34: 2018-11-27 00:12:47 ЛС | профиль | цитата
Это уже как бы называется консенсус
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#35: 2018-11-27 00:15:05 ЛС | профиль | цитата
sla8a писал(а):
Тогда так:

Ага, а doSectionData делаем так

procedure THIini._work_doSectionData;
var StrList:PStrList;
I:integer;
begin
TRY
if not Open(_Data,ifmRead) then exit;
TRY
StrList := NewStrList;
Ini.SectionData(strList);
for i := 0 to strList.Count-1 do
_hi_OnEvent(_event_onSectionData,strList.Items[i]);
FINALLY
strList.free;
END;
FINALLY
Ini.Free;
END;
end;

--- Добавлено в 2018-11-27 00:17:15

Galkov писал(а):
Это уже как бы называется консенсус

А мы вообще где-то защищались от исключения в _hi_OnEvent?
Что-то, КМК, мы перемудрили?

--- Добавлено в 2018-11-27 00:21:31

Вообще-то я ставлю секции FINALLY для очистки ресурсов там, где может быть несанкционированный выход по условию, как с функцией Open

--- Добавлено в 2018-11-27 00:37:36

Не, ну кому не нравится секция FINALLY, то можно и так сделать
procedure THIini._work_doSectionData;
var StrList:PStrList;
I:integer;
begin
if Open(_Data,ifmRead) then
begin
StrList := NewStrList;
Ini.SectionData(strList);
for i := 0 to strList.Count-1 do
_hi_OnEvent(_event_onSectionData,strList.Items[i]);
strList.free;
end;
Ini.Free;
end;

Редактировалось 5 раз(а), последний 2018-11-27 00:37:57
карма: 22

0
Ответов: 2193
Рейтинг: 673
#36: 2018-11-27 01:06:43 ЛС | профиль | цитата
nesco, лучше сразу дать вольную ini, сразу после получения списка.

   Ini.GetSectionNames(strList);
Ini.Free;

   Ini.SectionData(strList);
Ini.Free;
карма: 10

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#37: 2018-11-27 01:17:06 ЛС | профиль | цитата
sla8a писал(а):
лучше сразу дать вольную ini, сразу после получения списка.

В методе doSectionNames да, можно, тк там нет никакого условия работы функции Open, в остальных случаях можно оставить begin..end, если секции FINALLY не нравятся.

Редактировалось 2 раз(а), последний 2018-11-27 01:17:36
карма: 22

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#38: 2018-11-27 12:52:26 ЛС | профиль | цитата
Пофиксил, проверяйте
карма: 22

0
Ответов: 10
Рейтинг: 0
#39: 2018-11-27 17:51:35 ЛС | профиль | цитата
nesco, проверил, у меня заработало, спасибо!
И спасибо уважаемым sla8a и Galkov за поддержку и помощь в выяснении и решении вопроса.

Редактировалось 1 раз(а), последний 2018-11-27 17:58:33
карма: 0

0
39
Сообщение
...
Прикрепленные файлы
(файлы не залиты)