OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 02:07

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Воскресенье, 05 Апрель, 2009 23:07 

Зарегистрирован: Четверг, 02 Апрель, 2009 13:42
Сообщения: 23
Логично традиционно отвечу)

Мне надо скомпоновать свою подсистему в exe файл.

Вообще, я раньше, дабы этого избежать, просто создавал резервную копию ББ и сужал ее, удалив все прикладные подсистемы, побрякушки, документации итд... Ну вы понимаете, распространил прогу таким образом. Пользователь заходил в среду, и запускал программу (менюшки тоже изменял). *

Но! Возникла проблема - программа ни в какую (возможно изза отсутствия предварительной компиляции) не хотела запускаться, ибо не находила файлы.

Меня посетила идея о линковке - она куда удобнее и в распространении и в использовании.** Вот, я начал ее воплощать в жизнь и вот, на тебе...

В случае * программу представлял файл ББ и куча папок, назначение которых неясно юзеру, а в случае ** я получу exe файл и может, пару других папок, если потребуется (Rsrc?). В принципе, мне будет достаточно слинковать среду с минимальным количеством требуемых модулей, требуемым для работы МОЕЙ подсистемы, ну и с ней разумеется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Воскресенье, 05 Апрель, 2009 23:14 

Зарегистрирован: Четверг, 02 Апрель, 2009 13:42
Сообщения: 23
Да что там, Господи, мудрить. Мне надо просто свободно распространять свою программу, приводимую в движение одной командой. :cry:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 05:57 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
SanekSunshine писал(а):
Да что там, Господи, мудрить. Мне надо просто свободно распространять свою программу, приводимую в движение одной командой. :cry:
Не забудьте выложить все исходные тексты и ссылку на OMAG :mrgreen:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 07:31 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
SanekSunshine писал(а):
В случае * программу представлял файл ББ и куча папок, назначение которых неясно юзеру, а в случае ** я получу exe файл и может, пару других папок, если потребуется (Rsrc?).


Если установить, скажем, Google Picasa, то пользователь получает 8 папок и в них 272 файла весом в 36 метров. Даже малюсенькая Miranda - и та проявляет барские замашки: сотня файлов в 13 папках :) Картину может довершить пример от компании Valve: платформу Source составляют десятки тысяч файлов (я насчитал 48 тыс) в туче папок. Главное, что никто из авторов не заботится вопросом разъяснения юзеру назначения каждой папки.

А для чего такой размах? Думаю, ответ очевиден - для того, чтобы было проще обновлять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 10:23 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
SanekSunshine, бывает ещё DevPacker - и всё в одном файле, и обновлять не проблема


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 12:23 

Зарегистрирован: Четверг, 02 Апрель, 2009 13:42
Сообщения: 23
Иван Кузьмицкий писал(а):

А для чего такой размах? Думаю, ответ очевиден - для того, чтобы было проще обновлять.


Дык я как бы и не против. Но вариант со средой не проходит. Я проводил независимый бета-тест по локалке...На их компах не запускаица :( К тому же, освоить DevLinker всегда в жизни пригодится...

Игорь Лоскутов писал(а):
Не забудьте выложить все исходные тексты и ссылку на OMAG :mrgreen:


Пардон :?: :?: :?: Что такое OMAG?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 12:45 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
SanekSunshine писал(а):
На их компах не запускаица :(
Какая-то лажа у Вас там... проверьте еще.

SanekSunshine писал(а):
Что такое OMAG?
Oberon microsystems, AG (Aktion Gesellschaft=акционерное общество). Чаще встречается Ominc = Oberon microsystems, Inc.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 17:31 

Зарегистрирован: Четверг, 02 Апрель, 2009 13:42
Сообщения: 23
Info21 писал(а):
SanekSunshine писал(а):
На их компах не запускаица :(
Какая-то лажа у Вас там... проверьте еще.


Проверить что? Не запускается и все! Мне кажется, это из-за отсутствия компиляции на новом месте.

Кстати, а как осуществляется связь между exeшником и диалоговыми окнами, используемыми в программе? И еще одно...у вас есть какие-нибудь идеи по поводу того, что неправильного было в том списке линковки, который я ранее указывал?...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 17:35 

Зарегистрирован: Четверг, 02 Апрель, 2009 13:42
Сообщения: 23
Вообще, если понять, как правильно распространять программу необходимость альтернативного варианта отпадет. :idea:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 17:48 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
SanekSunshine писал(а):
Info21 писал(а):
SanekSunshine писал(а):
На их компах не запускаица :(
Какая-то лажа у Вас там... проверьте еще.
Проверить что?
А бес его знает. Непонятно же, что Вы там делаете.

А полная копия Блэкбокса запускается у клиентов?

SanekSunshine писал(а):
Мне кажется, это из-за отсутствия компиляции на новом месте.
Компиляция, вроде, ни причем (где тут разделять...).

SanekSunshine писал(а):
Кстати, а как осуществляется связь между exeшником и диалоговыми окнами, используемыми в программе?
Диалоговая форма -- просто файл. Должна быть прилинкована как ресурс, по инструкции.

SanekSunshine писал(а):
...у вас есть какие-нибудь идеи по поводу того, что неправильного было в том списке линковки, который я ранее указывал?...
Есть. Порядок модулей. Это единственная идея для такого случая.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 18:42 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
SanekSunshine, совет:
У всех получается. Рано или поздно. И у Вас получится, когда Вы метод кавалерийского наскока смените на внимательное изучение. Также, если Вы смените стиль изложения вопросов с того же наскока, на подробное описание проблемы, шагов решения, которые Вы предпринимаете, и укажите проблемы конкретного шага, то вероятность быть понятым сильно увеличится => увеличится вероятность что Вам помогут.
SanekSunshine писал(а):
Вообще, если понять, как правильно распространять программу необходимость альтернативного варианта отпадет. :idea:
Распространяйте как архив "суженной копии" ББ. Это самый быстрый способ (меньше изучать).
SanekSunshine писал(а):
Вообще, я раньше, дабы этого избежать, просто создавал резервную копию ББ и сужал ее, удалив все прикладные подсистемы, побрякушки, документации итд... Ну вы понимаете, распространил прогу таким образом. Пользователь заходил в среду, и запускал программу (менюшки тоже изменял). *
Но! Возникла проблема - программа ни в какую (возможно изза отсутствия предварительной компиляции) не хотела запускаться, ибо не находила файлы.
Вполне вероятно, что вместе с побрякушками Вы удалили что-то необходимое... Если в полном ББ работает, значит так оно и есть.

Если потребность создать exe-файл не потеряла для Вас актуальность, продолжим разговор...


Последний раз редактировалось Евгений Темиргалеев Вторник, 07 Апрель, 2009 08:42, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 22:01 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
HostMenus где?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Вторник, 07 Апрель, 2009 01:07 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
SanekSunshine, я как-то писал инструментик для облегчения процесса линковки. Лежит тут, в подсистеме Rad. Можете с ним попробывать, хотя там некоторые модули всё-равно вручную указывать приходится


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Среда, 08 Апрель, 2009 00:04 

Зарегистрирован: Четверг, 02 Апрель, 2009 13:42
Сообщения: 23
Я просто не понимаю как исправный список модулей для линковки может дать палёный exe? У вас когда-нибудь такое бывало? И если да, то как вы выкручивались?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Среда, 08 Апрель, 2009 01:27 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Объясняю. Допустим у нас есть модуль:
Код:
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 (самый безболезненный и оптимальный вариант - им можно хоть всю среду в один файл упихать).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Среда, 08 Апрель, 2009 14:07 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
SanekSunshine писал(а):
Я просто не понимаю как исправный список модулей для линковки может дать палёный exe? У вас когда-нибудь такое бывало? И если да, то как вы выкручивались?


Пример команды для линковки приложения:
DevLinker.Link MyApp.exe := Kernel$+ Files HostFiles HostPackedFiles StdLoader Dialog Meta Math Strings Stores Converters Log Services Fonts Ports Sequencers Models Views Controllers Properties Printers Mechanisms Containers Dates Printing Documents Windows StdCFrames Controls StdDialog StdInterpreter StdApi StdCmds HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows HostPrinters HostCFrames HostDialog HostClipboard HostCmds HostMenus CommStreams TextModels TextMappers TextRulers TextSetters TextViews TextControllers StdLinks StdMenuTool StdLog Config Init
Я использует BlackBox 1.6, поэтому National перед Kernel отсутствует.
Перед модулем Config нужно указать свои модули.

Ресурсные файлы можно также внедрить в exe файл. Делается это примерно такой командой:
DevPacker.PackThis MyApp.exe := My/Rsrc/xxx.odc System/Rsrc/Menus.odc (в конце команды должен стоять завершитель команды - значок в виде треугольника, его можно взять из документации по подсистеме DevPacker)

После того как слинковали, пробуем запустить exe файл сначала в папке BlackBox-а. Должно работать.
Затем перемещаем exe файл в какую-нибудь пустую папку и пробуем запустить, если не работает, то пробуем скопироваться некоторые папки с модулями из папки BlackBox-а в текущую папку. Затем удаляем ненужные и так до тех пор, пока не найдем модули, без которых exe файл не работает. Это модули надо будет добавить в список линковки, слинковать, а затем добавить ресурные файлы.

Таким образом можно добиться, чтобы приложение представляло собой 1 exe файл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Четверг, 09 Апрель, 2009 08:06 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Собс-но всё сказали... Одно но.
Rifat писал(а):
Это модули надо будет добавить в список линковки, слинковать, а затем добавить ресурные файлы.
Если пользоваться DevPacker, то обычно линкуют минимальный exe. А все остальные необходимые файлы подсистем прилепляются пакером. В том числе и кодовый файлы. Для них выполняется динамическая загрузка. При этом элементарно делаются обновления, про что выше Иван Горячев говорил (viewtopic.php?p=27009#p27009). Обновления кладут как в соот-е папки рядом с exe. Эти файлы имеют приоритет при чтении, т.е. перекрывают припакованные к exe. Также (благодаря той же дин. загрузке) не надо заморачиваться порядком указания модулей как для линкера.
Docu/DevPacker писал(а):
Касательно exe-файлов
Упаковщик не может создать exe-файл, он может лишь упаковать файлы в существующий exe-файл. Это значит, что придется использовать компоновщик для создания минимального exe-файла для упаковки. Минимальный exe-файл должен иметь скомпонованный HostPackedFiles, так как это модуль, который позволяет извлекать файлы. Минимальная команда для компоновщика такова:

DevLinker.Link exefilename.exe := Kernel$+ Files HostFiles HostPackedFiles StdLoader


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Четверг, 09 Апрель, 2009 09:45 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Rifat писал(а):
Затем удаляем ненужные и так до тех пор, пока не найдем модули, без которых exe файл не работает.
Жесть! А не проще следить за модулями и файлами проекта? У меня, например, все модули указаны в спец.документе Tool, который я использую и для сборки. Причём во всех моих подсистемах. Его можно создать для всех модулей ваших подсистем, выписав их в строку(вот где контроль спасёт), а потом выбрав пункт меню Info > Create Tool. Контролируйте строже проект, а то получается, сами не знаете, что как должно быть в файлах. Имхо, так нехорошо.


Последний раз редактировалось Пётр Кушнир Четверг, 09 Апрель, 2009 09:51, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Четверг, 09 Апрель, 2009 09:46 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Пётр Кушнир писал(а):
Жесть! А не проще следить за модулями и файлами проекта?
Вручную это делать скучно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevLinker
СообщениеДобавлено: Четверг, 09 Апрель, 2009 09:49 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Ну значит нужен Инструментъ! Например, указать только модули верхнего уровня(которые никем не импортируются, и ещё таких, которые реализуют что-либо скрыто, и тоже не импортируются) и по их зависимостям сгенерить список модулей хоть до системных(и соответственно, хостных).
Наряду с подсистемами появляется сущность, можно обозвать её Проект, например.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB