Последовательность unit'ов
Модератор: Модераторы
имею чтото типа этого:
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 всё работает нормально
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 всё работает нормально
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Эхх. снова топчусь по этим граблям.
Когда писал на delphi и lazarus по очереди - нужда заставила инициализацию uses модулей делать руками, т.к. в delphi и lazarus получались разные последовательности выполнения initialization. отказался от delphi, хочу сделать по человечески.
zcad.dpr - главный файл проекта:
UUnitManager.pas:
Varman.pas - в interface uses много всего, UUnitManager естественно нет, т.к. всё компилится и перекрестных ссылок нет
инициализация UUnitManager вызывается до инициализации varman - как такое может быть?
ЗЫ. торжественно сам себе вручаю золотую лопату
Когда писал на delphi и lazarus по очереди - нужда заставила инициализацию uses модулей делать руками, т.к. в delphi и lazarus получались разные последовательности выполнения initialization. отказался от delphi, хочу сделать по человечески.
zcad.dpr - главный файл проекта:
Код: Выделить всё
uses
............
varman,
UUnitManager,
............UUnitManager.pas:
Код: Выделить всё
interface
uses Varman,
............Varman.pas - в interface uses много всего, UUnitManager естественно нет, т.к. всё компилится и перекрестных ссылок нет
инициализация UUnitManager вызывается до инициализации varman - как такое может быть?
ЗЫ. торжественно сам себе вручаю золотую лопату
А нельзя в начале модуля UUnitManager прописать инициализацию Varman?
UUnitManager.pas:
Не уверен что сработает, но...
UUnitManager.pas:
Код: Выделить всё
interface
uses Varman,
............
............
begin
вызов некой процедуры из Varman которая потянет за собой инициализацию всего модуля;
.............
end.
Не уверен что сработает, но...
Нет, от наличия кода в секции инициализации ниче не меняется, с пустыми секциями всё также.
В проекте под сотню юнитов, лог процесса инициализации показывает очень хитрые порядки инициализации, ни с какими uses не совпадающие. видимо оно так и должно быть.
В проекте под сотню юнитов, лог процесса инициализации показывает очень хитрые порядки инициализации, ни с какими uses не совпадающие. видимо оно так и должно быть.
Стало интересно, если зависимости позволяют, на предыдущей версии компилятора всё тоже самое?
судя по дате моего первого сообщения так было еще в 2.0
проблему решил разделением обного модуля с большим списком implementation uses на несколько. на этот модуль были ссылки и из Varman и из UUnitManager.
проблему решил разделением обного модуля с большим списком implementation uses на несколько. на этот модуль были ссылки и из Varman и из UUnitManager.
