Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Initialization [Win32]


dmk ©   (14.02.17 15:48

Всем привет!
Не пойму, почему секция 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 все отлично.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо