-
Всем привет! Не пойму, почему секция Initialization не инициализируется? Вроде как Application.Initialize вызывает эти секции. Проект правда из Delphi был перекинут. Может где модули прописать надо?
-
Lazarus 1.6.2. FPC 3.0.0. Win 64
-
вообще-то initialization секция вызывается независимо от Application, а просто при запуске программы в порядке списка (подключения) модулей, где они объявлены. А вот почему не пашет, это вопрос ещё. Надо смотреть, какой именно код там расположен (как минимум). Ну, и для надёжности имя модуля можно указать в dpr-файле в списке импорта.
-
Вот и мне странно.
Обычный код. Вызывается 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.
-
Создал новый проект в FPC. Все залил в него. То же самое :(
-
Причем при выходе проект валится на секции Finalization, хотя из всего проекта и Initialization и Finalization убраны.
-
Для Delphi есть рекомендация Initialization/Finalization не использовать. Перепиши на class constructor/class destructor
-
>Для Delphi есть рекомендация Initialization/Finalization не использовать. Странно, но в том же Lazarus в исходникак данные секции часто встречаются заполненными.
>Перепиши на class constructor/class destructor Переделал. Все равно валится. Видимо надо по модулю отключать - смотреть кто рушит стек. Ошибка EStackOverflow при выходе. На Delphi ничего не рушится. Ни одного хинта или предупреждения.
-
Так у тебя "секция Initialization не инициализируется" или "все равно валится" ?
> Ни одного хинта или предупреждения.. Delphi, она добрая! ))
-
У меня нет секций Initialization и Finalization, но валится при выходе в Finalization.
-
> Для Delphi есть рекомендация Initialization/Finalization > не использовать.
Это как ? Чья рекомендация и почему не использовать ?
-
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.
-
> вообще-то initialization секция вызывается независимо от > Application, а просто при запуске программы в порядке списка > (подключения) модулей, где они объявлены > >
Application.Initialize их вроде бы вызывает.
> Methods#Class_Constructors
я так понимаю - это касается только классовых конструкторов.
> Странно, но в том же Lazarus в исходникак данные секции > часто встречаются заполненными
нормально всё должно работать, обычная практика
-
>Application.Initialize их вроде бы вызывает. Не. До Application.Initialize по секциям пробегается. С первого begin -> просмотр секций. Значит мое приложение где-то рушит стек. Будем разбираться. Странно что в Delphi все отлично.
|