Конференция "FreePascal" » Initialization [Win32]
 
  • dmk © (14.02.17 15:48) [0]
    Всем привет!
    Не пойму, почему секция Initialization не инициализируется?
    Вроде как Application.Initialize вызывает эти секции.
    Проект правда из Delphi был перекинут. Может где модули прописать надо?
  • dmk © (14.02.17 15:50) [1]
    Lazarus 1.6.2. FPC 3.0.0. Win 64
  • Awkward © (14.02.17 17:35) [2]
    вообще-то initialization секция вызывается независимо от Application, а просто при запуске программы в порядке списка (подключения) модулей, где они объявлены. А вот почему не пашет, это вопрос ещё. Надо смотреть, какой именно код там расположен (как минимум). Ну, и для надёжности имя модуля можно указать в dpr-файле в списке импорта.
  • dmk © (14.02.17 18:03) [3]
    Вот и мне странно.

    Обычный код. Вызывается Initialize в Mem64, а в остальных (Math64, например) Initialize игнорируется. Там почти во всех есть секция Initialize.

    program WuFpc;

    {$mode delphi}{$H+}

    uses
     Interfaces,
     Windows, SysUtils, Forms, WuFP, Mem64, ScreenBitmap64, Types64, FileAccess64, Const64, Math64,
     Region64, Msg64, Transform2D, Res64, Window64, Options;

    begin
     RequireDerivedFormResource := True;
     Application.Initialize;
     Application.CreateForm(TTestForm, TestForm);
     Application.Run;
    end.
  • dmk © (14.02.17 19:51) [4]
    Создал новый проект в FPC. Все залил в него. То же самое :(
  • dmk © (14.02.17 20:53) [5]
    Причем при выходе проект валится на секции Finalization, хотя из всего проекта и Initialization и Finalization убраны.
  • NoUser © (15.02.17 22:54) [6]
    Для Delphi есть рекомендация Initialization/Finalization не использовать.
    Перепиши на class constructor/class destructor
  • dmk © (16.02.17 01:31) [7]
    >Для Delphi есть рекомендация Initialization/Finalization не использовать.
    Странно, но в том же Lazarus в исходникак данные секции часто встречаются заполненными.

    >Перепиши на class constructor/class destructor
    Переделал. Все равно валится. Видимо надо по модулю отключать - смотреть кто рушит стек. Ошибка EStackOverflow при выходе. На Delphi ничего не рушится. Ни одного хинта или предупреждения.
  • NoUser © (16.02.17 16:24) [8]
    Так у тебя "секция Initialization не инициализируется" или "все равно валится" ?

    > Ни одного хинта или предупреждения..
    Delphi, она добрая! ))
  • dmk © (16.02.17 21:55) [9]
    У меня нет секций Initialization и Finalization, но валится при выходе в Finalization.
  • Игорь Шевченко © (17.02.17 13:59) [10]

    > Для Delphi есть рекомендация Initialization/Finalization
    > не использовать.


    Это как ? Чья рекомендация и почему не использовать ?
  • NoUser © (18.02.17 18:34) [11]
    http://docwiki.embarcadero.com/RADStudio/Seattle/en/Methods#Class_Constructors


    > Even though the same result can be obtained by placing class
    > initialization code into the initialization section, class
    > constructors have the benefit of helping the compiler decide
    > which classes should be included into the final binary file
    > and which should be removed from it.


    кстати, есть итересное замечание для
    > dmk ©   (16.02.17 21:55) [9]


    > Note: The class destructor for a generic class or record
    > may execute multiple times. The exact number of times the
    > class destructor is executed in this case depends on the
    > number of specialized versions of the generic type.
  • Дмитрий Белькевич © (21.02.17 10:32) [12]

    > вообще-то initialization секция вызывается независимо от
    > Application, а просто при запуске программы в порядке списка
    > (подключения) модулей, где они объявлены
    >
    >


    Application.Initialize их вроде бы вызывает.


    > Methods#Class_Constructors


    я так понимаю - это касается только классовых конструкторов.


    > Странно, но в том же Lazarus в исходникак данные секции
    > часто встречаются заполненными


    нормально всё должно работать, обычная практика
  • dmk © (21.02.17 22:26) [13]
    >Application.Initialize их вроде бы вызывает.
    Не. До Application.Initialize по секциям пробегается. С первого begin -> просмотр секций.
    Значит мое приложение где-то рушит стек. Будем разбираться. Странно что в Delphi все отлично.
 
Конференция "FreePascal" » Initialization [Win32]
Есть новые Нет новых   [134427   +29][b:0][p:0]