Конференция "Основная" » Очень странное срабатывание секции INITIALIZATION
 
  • IGray (10.03.09 12:16) [0]
    Есть модуль. В нём одна процедура и секция инициализации.
    Ставлю точки остановки на первую строчку в процедуре и первую строчку секции инициализации. Запускаю (F9).
    Управление сначала попадает В ПРОЦЕДУРУ!!! И только потом - В СЕКЦИЮ ИНИЦИАЛИЗАЦИИ!

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

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

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

    Очень интересно мнение профессионалов!
  • clickmaker © (10.03.09 12:19) [1]
    > Управление сначала попадает В ПРОЦЕДУРУ!!! И только потом
    > - В СЕКЦИЮ ИНИЦИАЛИЗАЦИИ!

    а процедура-то откуда вызывается? не из секции инициализации? -)
  • IGray (10.03.09 12:36) [2]
    Вызывается из секции инициализации ДРУГОГО модуля.
    А даже если б из этого - как это объясняет, что управление сначала попадает в процедуру, и лишь потом - на ПЕРВУЮ строчку секции инициализации? Я в недоумении..

    P.S. Юзаю Delphi7
  • clickmaker © (10.03.09 12:38) [3]
    > [2] IGray   (10.03.09 12:36)
    > Вызывается из секции инициализации ДРУГОГО модуля.

    а модули в каком порядке в файле проекта?
  • IGray (10.03.09 12:46) [4]
    Сорри, а какая разница?
    Если процедура из модуля А вызывается из секции инициализации модуля Б, то это значит, что модуль А указан в списке USES модуля Б, и по-любому секция инициализации модуля А должна ведь была сработать первой...

    Мож это какой-то известный баг Дельфи?
  • Anatoly Podgoretsky © (10.03.09 12:49) [5]
    > IGray  (10.03.2009 12:16:00)  [0]

    Код нужен и описание, что и когда вызывается, но видимо ты что то путаешь, инициализацию не требуется вызывать.
  • Palladin © (10.03.09 12:49) [6]
    Начни не по F9, а по F7 и посмотри, что начинает исполнятся
  • IGray (10.03.09 13:16) [7]

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

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

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

    Проект скомпилирован с опцией "Build with Run-Time packages"
  • Anatoly Podgoretsky © (10.03.09 13:19) [8]
    > IGray  (10.03.2009 12:36:02)  [2]

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

    Я легко обеспечу кросс зависимость.
  • Дмитрий Белькевич © (10.03.09 13:30) [10]
    >На самом деле проект крупный, много модулей и кода, поэтому здесь выложить сложно.

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

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

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

    Это ээээ... пуленепробиваемое правило, или от него, иногда, можно отступать ?
  • Дмитрий Белькевич © (10.03.09 13:57) [12]
    Можно отступать, вообще, от многого. Главное - что бы потом не биться головой об стену в поисках ошибки, как ТС.
  • Palladin © (10.03.09 14:00) [13]

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

    Это правило Анатоля и чем дальше ты от него, тем безопасней не следовать этому правилу. :)
  • IGray (10.03.09 14:08) [14]

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

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


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

    Похоже, этого не избежать, спасибо!
  • Palladin © (10.03.09 14:13) [15]

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

    Я думаю, что это реально ново и для борланда, вот они удивятся :) Ведь добрая часть VCL не следует правилу Анатоля! :)
  • просто так (10.03.09 14:13) [16]
    модули циклически ссылаются друг на друга interface - implementation
  • Anatoly Podgoretsky © (10.03.09 14:16) [17]
    > Riply  (10.03.2009 13:54:11)  [11]

    Можно, когда есть увереность.
  • просто так (10.03.09 14:17) [18]
    + >>Секции инициализации не должны вызывать процедуры из других модулей, явно или косвенно.
    тогда порядок INITIALIZATION будет отличаться от задуманного
  • Anatoly Podgoretsky © (10.03.09 14:17) [19]
    > IGray  (10.03.2009 14:08:14)  [14]

    Как же не имел, а что тогда плачешь?
 
Конференция "Основная" » Очень странное срабатывание секции INITIALIZATION
Есть новые Нет новых   [118488   +59][b:0][p:0.001]