Последовательность unit'ов

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение zub » 19.11.2005 16:38:02

имею чтото типа этого:
commandline.pas=
unit commandline;
......
begin
commandmanager.init
end.
GDBCommandsElectrical.pas=
unit GDBCommandsElectrical;
interface
uses
commandline,
...................
begin
commandmanager.CommandRegister(@Wire);
end.
Второй день не могу понять почему commandmanager.CommandRegister(@Wire) срабатывает раньше commandmanager.init?
В delphi всё работает нормально
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Сообщение Alexander » 20.11.2005 14:46:44

Не begin, а initialization.
Alexander
 

Сообщение zub » 20.11.2005 17:25:30

Всегда думал что это одно и тоже. Но с initialization тоже работает не в том порядке.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Сообщение Janus » 20.11.2005 20:11:01

По идее, секции инициализации модулей выполняются в том порядке, в котором модули указаны в uses.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение zub » 20.11.2005 20:47:12

program CAD;
{$IFDEF FPC}{$MODE DELPHI}{$APPTYPE GUI}{$ENDIF}
uses
commandline,
log,
sysinfo,
windows,
messages,
mygl;
..............
end;
В главном модуле commandline подключается первым, но его инициализация всеравно идет не первая
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Сообщение Иван Шихалев » 23.11.2005 15:35:11

Очень странно, но можно попробовать указать явно: -Fasystem,commandline, если я ничего не путаю - возможно, не -Fa, а другой ключик.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Последовательность unit'ов

Сообщение zub » 19.07.2010 12:44:52

Эхх. снова топчусь по этим граблям.
Когда писал на delphi и lazarus по очереди - нужда заставила инициализацию uses модулей делать руками, т.к. в delphi и lazarus получались разные последовательности выполнения initialization. отказался от delphi, хочу сделать по человечески.

zcad.dpr - главный файл проекта:
Код: Выделить всё
uses
  ............
  varman,
  UUnitManager,
  ............


UUnitManager.pas:
Код: Выделить всё
interface
uses Varman,
  ............



Varman.pas - в interface uses много всего, UUnitManager естественно нет, т.к. всё компилится и перекрестных ссылок нет

инициализация UUnitManager вызывается до инициализации varman - как такое может быть?

ЗЫ. торжественно сам себе вручаю золотую лопату
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Последовательность unit'ов

Сообщение Сквозняк » 25.07.2010 16:58:45

А нельзя в начале модуля UUnitManager прописать инициализацию Varman?

UUnitManager.pas:
Код: Выделить всё
interface
uses Varman,
  ............
  ............
begin
вызов некой процедуры из Varman которая потянет за собой инициализацию всего модуля;
.............
end.

Не уверен что сработает, но...
Сквозняк
энтузиаст
 
Сообщения: 1126
Зарегистрирован: 29.06.2006 22:08:32

Re: Последовательность unit'ов

Сообщение zub » 25.07.2010 22:42:36

Нет, от наличия кода в секции инициализации ниче не меняется, с пустыми секциями всё также.
В проекте под сотню юнитов, лог процесса инициализации показывает очень хитрые порядки инициализации, ни с какими uses не совпадающие. видимо оно так и должно быть.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Последовательность unit'ов

Сообщение Сквозняк » 26.07.2010 09:46:51

Стало интересно, если зависимости позволяют, на предыдущей версии компилятора всё тоже самое?
Сквозняк
энтузиаст
 
Сообщения: 1126
Зарегистрирован: 29.06.2006 22:08:32

Re: Последовательность unit'ов

Сообщение zub » 26.07.2010 11:10:51

судя по дате моего первого сообщения так было еще в 2.0
проблему решил разделением обного модуля с большим списком implementation uses на несколько. на этот модуль были ссылки и из Varman и из UUnitManager.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru