Объясняю. Допустим у нас есть модуль:
Код:
MODULE MyMod;
IMPORT Files;
... Files.dir.New( ...
В среде всё прекрасно работает. Теперь мы пытаемся его слинковать:
DevLinker.Link MyExe := Kernel$+ Files MyModОно слинковалось, но при запуске выдаёт "ой!". Потому что на самом деле Files.dir - это экземпляр HostFiles.Directory. А мы его не слинковали. Добавляем:
DevLinker.Link MyExe := Kernel$+ Files MyMod HostFilesСлинковалось. Но при запуске - опять "ой!". Потому что секции BEGIN слинкованных модулей вызываются в порядке их скармливания DevLinkerу, и MyMod пытается работать с Files.dir до того как HostFiles этот самый dir наладит. Соответственно правильная команда линкера будет:
DevLinker.Link MyExe := Kernel$+ Files HostFiles MyModТак что имеет значение именно порядок модулей в команде, и единственный способ "выкрутиться" - его соблюдать. Ну или использовать имеющиеся инструменты (Create tool или мой "мастер" из Rad). Или писать таковой самому.
P.S. Отсутствие файлов ресурсов к трапам вести не должно - просто будет у вас вместо нормального меню, например, один пункт "File", или диалог какой молча не покажется
И, кстати, у Вас действительно нет HostMenus, а это - основной цикл главного окна ББ. И Init я тоже не увидел
P.P.S. Дополню. Что происходит в момент старта системы. Всё очень просто - поочерёдно вызываются секции BEGIN модулей, перечисленных в списке линковщика. Соответственно в стандартном ББ мы имеем список:
Kernel Files HostFiles StdLoader. Но тут нужно обратить внимание на модуль
StdLoader. Он обеспечивает динамическую загрузку модулей и кроме того -
старт самой среды. Выглядит это так:
Код:
m := Kernel.ThisMod("Init");
То есть здесь идёт косвенный вызов модуля, никак по спискам импорта не отслеживаемый. Если же мы посмотрим в модуль Init, то увидим в секции BEGIN три интересных строчки:
Код:
HostMenus.OpenApp;
...
Dialog.Call("Config.Setup", "", res);
HostMenus.Run
Первая - создаёт главное окно ББ и производит ещё кое-какие предварительные действия, вторая - загружает (опять косвенно!) модуль Config и исполняет его процедуру Setup и третья -
запускает цикл обработки сообщений основного окна ББ. Кстати, если просто прилинковать модуль Config - никакого эффекта мы не получим, ибо секции BEGIN у него нет и Config.Setup вызываться не будет. И простая линковка HostMenus тоже не даст эффекта - по той же причине
Соответственно чтобы поиметь ББ одним экзешником, мы должны либо прилинковывать модуль Init, либо делать свой модуль с соответствующими вызовами, либо - пользоваться DevPacker (самый безболезненный и оптимальный вариант - им можно хоть всю среду в один файл упихать).