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

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

Очень странное срабатывание секции INITIALIZATION


Страницы:   1 2 3

IGray ©   (2009-03-10 12:16:00) 

Есть модуль. В нём одна процедура и секция инициализации.
Ставлю точки остановки на первую строчку в процедуре и первую строчку секции инициализации. Запускаю (F9).
Управление сначала попадает В ПРОЦЕДУРУ!!! И только потом - В СЕКЦИЮ ИНИЦИАЛИЗАЦИИ!

Вопрос: как такое вообще возможно?? В какой ситуации???

Не сообщаю дополнительные обстоятельства потому, что не могу понять, какие из них существенны...

Считал, что секция инициализации по определению вызывается первой ВСЕГДА!

Очень интересно мнение профессионалов!


просто так   (2009-03-10 14:17:00) [41]

+ >>Секции инициализации не должны вызывать процедуры из других модулей, явно или косвенно.
тогда порядок INITIALIZATION будет отличаться от задуманного


Anatoly Podgoretsky   (2009-03-10 14:16:00) [42]

> Riply  (10.03.2009 13:54:11)  [11]

Можно, когда есть увереность.


просто так   (2009-03-10 14:13:00) [43]

модули циклически ссылаются друг на друга interface - implementation


Palladin   (2009-03-10 14:13:00) [44]


> А вот это интересно, так как это реально ново для меня.

Я думаю, что это реально ново и для борланда, вот они удивятся :) Ведь добрая часть VCL не следует правилу Анатоля! :)


IGray   (2009-03-10 14:08:00) [45]


> Секции инициализации не должны вызывать процедуры из других
> модулей, явно или косвенно.

А вот это интересно, так как это реально ново для меня. Раньше этому правилу никогда не следовал и проблем не имел. Можете ли обосновать свою мысль?


> Тестовый пример делай

Похоже, этого не избежать, спасибо!


Palladin   (2009-03-10 14:00:00) [46]


> Riply ©   (10.03.09 13:54) [11]

Это правило Анатоля и чем дальше ты от него, тем безопасней не следовать этому правилу. :)


Дмитрий Белькевич   (2009-03-10 13:57:00) [47]

Можно отступать, вообще, от многого. Главное - что бы потом не биться головой об стену в поисках ошибки, как ТС.


Riply   (2009-03-10 13:54:00) [48]

> [8] Anatoly Podgoretsky ©   (10.03.09 13:19)
> Секции инициализации не должны вызывать процедуры из других модулей, явно или косвенно.

Это ээээ... пуленепробиваемое правило, или от него, иногда, можно отступать ?


Дмитрий Белькевич   (2009-03-10 13:30:00) [49]

>На самом деле проект крупный, много модулей и кода, поэтому здесь выложить сложно.

Тестовый пример делай, как проявляется проблема. Может и сам поймёшь почему, а нет - то всем покажешь.

А так - только гадание на гуще.

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


Anatoly Podgoretsky   (2009-03-10 13:19:00) [50]

> clickmaker  (10.03.2009 12:38:03)  [3]

Я легко обеспечу кросс зависимость.


Anatoly Podgoretsky   (2009-03-10 13:19:00) [51]

> IGray  (10.03.2009 12:36:02)  [2]

Секции инициализации не должны вызывать процедуры из других модулей, явно или косвенно.


IGray   (2009-03-10 13:16:00) [52]


> инициализацию не требуется вызывать

Сорри, в каком смысле? Поясните свою мысль пожалуйста.
До инициализации модуля А процедура в нём не работает правильно...

На самом деле проект крупный, много модулей и кода, поэтому здесь выложить сложно.. Но я пока не понимаю, как это может повлиять на суть вопроса...

Проект скомпилирован с опцией "Build with Run-Time packages"


Palladin   (2009-03-10 12:49:00) [53]

Начни не по F9, а по F7 и посмотри, что начинает исполнятся


Anatoly Podgoretsky   (2009-03-10 12:49:00) [54]

> IGray  (10.03.2009 12:16:00)  [0]

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


IGray   (2009-03-10 12:46:00) [55]

Сорри, а какая разница?
Если процедура из модуля А вызывается из секции инициализации модуля Б, то это значит, что модуль А указан в списке USES модуля Б, и по-любому секция инициализации модуля А должна ведь была сработать первой...

Мож это какой-то известный баг Дельфи?


clickmaker   (2009-03-10 12:38:00) [56]

> [2] IGray   (10.03.09 12:36)
> Вызывается из секции инициализации ДРУГОГО модуля.

а модули в каком порядке в файле проекта?


IGray   (2009-03-10 12:36:00) [57]

Вызывается из секции инициализации ДРУГОГО модуля.
А даже если б из этого - как это объясняет, что управление сначала попадает в процедуру, и лишь потом - на ПЕРВУЮ строчку секции инициализации? Я в недоумении..

P.S. Юзаю Delphi7


clickmaker   (2009-03-10 12:19:00) [58]

> Управление сначала попадает В ПРОЦЕДУРУ!!! И только потом
> - В СЕКЦИЮ ИНИЦИАЛИЗАЦИИ!

а процедура-то откуда вызывается? не из секции инициализации? -)


Страницы:   1 2 3

Наверх

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