-
Есть модуль. В нём одна процедура и секция инициализации.
Ставлю точки остановки на первую строчку в процедуре и первую строчку секции инициализации. Запускаю (F9).
Управление сначала попадает В ПРОЦЕДУРУ!!! И только потом - В СЕКЦИЮ ИНИЦИАЛИЗАЦИИ!
Вопрос: как такое вообще возможно?? В какой ситуации???
Не сообщаю дополнительные обстоятельства потому, что не могу понять, какие из них существенны...
Считал, что секция инициализации по определению вызывается первой ВСЕГДА!
Очень интересно мнение профессионалов!
-
> Управление сначала попадает В ПРОЦЕДУРУ!!! И только потом
> - В СЕКЦИЮ ИНИЦИАЛИЗАЦИИ!
а процедура-то откуда вызывается? не из секции инициализации? -)
-
Вызывается из секции инициализации ДРУГОГО модуля.
А даже если б из этого - как это объясняет, что управление сначала попадает в процедуру, и лишь потом - на ПЕРВУЮ строчку секции инициализации? Я в недоумении..
P.S. Юзаю Delphi7
-
> [2] IGray (10.03.09 12:36)
> Вызывается из секции инициализации ДРУГОГО модуля.
а модули в каком порядке в файле проекта?
-
Сорри, а какая разница?
Если процедура из модуля А вызывается из секции инициализации модуля Б, то это значит, что модуль А указан в списке USES модуля Б, и по-любому секция инициализации модуля А должна ведь была сработать первой...
Мож это какой-то известный баг Дельфи?
-
> IGray (10.03.2009 12:16:00) [0]
Код нужен и описание, что и когда вызывается, но видимо ты что то путаешь, инициализацию не требуется вызывать.
-
Начни не по F9, а по F7 и посмотри, что начинает исполнятся
-
> инициализацию не требуется вызывать
Сорри, в каком смысле? Поясните свою мысль пожалуйста.
До инициализации модуля А процедура в нём не работает правильно...
На самом деле проект крупный, много модулей и кода, поэтому здесь выложить сложно.. Но я пока не понимаю, как это может повлиять на суть вопроса...
Проект скомпилирован с опцией "Build with Run-Time packages"
-
> IGray (10.03.2009 12:36:02) [2]
Секции инициализации не должны вызывать процедуры из других модулей, явно или косвенно.
-
> clickmaker (10.03.2009 12:38:03) [3]
Я легко обеспечу кросс зависимость.
-
>На самом деле проект крупный, много модулей и кода, поэтому здесь выложить сложно.
Тестовый пример делай, как проявляется проблема. Может и сам поймёшь почему, а нет - то всем покажешь.
А так - только гадание на гуще.
Так же разумно включить компиляцию с дебажными либами и посмотреть колл-стэки, кто что и когда вызывает.
-
> [8] Anatoly Podgoretsky © (10.03.09 13:19)
> Секции инициализации не должны вызывать процедуры из других модулей, явно или косвенно.
Это ээээ... пуленепробиваемое правило, или от него, иногда, можно отступать ?
-
Можно отступать, вообще, от многого. Главное - что бы потом не биться головой об стену в поисках ошибки, как ТС.
-
> Riply © (10.03.09 13:54) [11]
Это правило Анатоля и чем дальше ты от него, тем безопасней не следовать этому правилу. :)
-
> Секции инициализации не должны вызывать процедуры из других
> модулей, явно или косвенно.
А вот это интересно, так как это реально ново для меня. Раньше этому правилу никогда не следовал и проблем не имел. Можете ли обосновать свою мысль?
> Тестовый пример делай
Похоже, этого не избежать, спасибо!
-
> А вот это интересно, так как это реально ново для меня.
Я думаю, что это реально ново и для борланда, вот они удивятся :) Ведь добрая часть VCL не следует правилу Анатоля! :)
-
модули циклически ссылаются друг на друга interface - implementation
-
> Riply (10.03.2009 13:54:11) [11]
Можно, когда есть увереность.
-
+ >>Секции инициализации не должны вызывать процедуры из других модулей, явно или косвенно.
тогда порядок INITIALIZATION будет отличаться от задуманного
-
> IGray (10.03.2009 14:08:14) [14]
Как же не имел, а что тогда плачешь?