OberonCore https://forum.oberoncore.ru/ |
|
Компоновка exe для калькулятора из примеров. https://forum.oberoncore.ru/viewtopic.php?f=1&t=196 |
Страница 1 из 1 |
Автор: | Alexey Veselovsky [ Суббота, 06 Май, 2006 14:12 ] |
Заголовок сообщения: | Компоновка exe для калькулятора из примеров. |
Попробовал собрать exe'шник - из примеров модуля-компоновщика, таки все собралось (единственное что, документация несколько устарела - пришлось добавить модуль National, иначе блэкбоксы не собирались). Но! Как вот собрать в виде отдельного exe'шника например калькулятор из стандартных примеров? Я попробовал - у меня exe-шник конечно получился, но он просто напросто вылетает с ошибкой. Хотя и ядро и все остальное там имеется. |
Автор: | Grabli [ Суббота, 06 Май, 2006 15:48 ] |
Заголовок сообщения: | |
По моему мнению, линковка калькулятора из стандартных примеров это шаманство высшей степени. Этот калькулятор целиком и полностью зависит от framework-а black box, поэтому, что бы сделать exe файл при запуске которого показался только калькулятор, придется колдовать над самим BB: прятать основное окно и т.д. На мой взгляд легче написать на BB калькулятор используя только Win32 API, а потом слинковать exe. Меньше трах-тибидохов будет. |
Автор: | Alexey Veselovsky [ Суббота, 06 Май, 2006 18:28 ] |
Заголовок сообщения: | |
Grabli писал(а): По моему мнению, линковка калькулятора из стандартных примеров это шаманство высшей степени.
Этот калькулятор целиком и полностью зависит от framework-а black box, поэтому, что бы сделать exe файл при запуске которого показался только калькулятор, придется колдовать над самим BB: прятать основное окно и т.д. На мой взгляд легче написать на BB калькулятор используя только Win32 API, а потом слинковать exe. Меньше трах-тибидохов будет. Через Win32 API - кто угодно сможет. Если работать напрямую с Win32 API, то возможно какой-нибудь XDS будет более оптимальным нежели BB. По крайней мере там вроде как нет проблем с многопоточностью. Вопрос же возник потому как сейчас реалии таковы, что на выходе обычно должен быть как раз вот такой вот exe'шник. И если этот простейший калькулятор действительно проще переписать на чистом Win32 API чем подправить его имеющийся в примерах так, чтобы получилось таки собрать его в экзешник, то игра не стоит свеч. По крайней мере львиная доля примеров из стандартной документации становится просто напросто бесполезной т.к. знания полученные из этих примеров (работа с формами и пр.) при создании самостоятельных программ неприменимы. Но я надеюсь что ты ошибаешься, и тот же калькулятор можно подправить а затем скомпоновать без особого геморроя, чтобы получился обычный виндовозный работающий экзешник. Надеюсь кто-нибудь мне подскажет как это сделать... |
Автор: | Grabli [ Суббота, 06 Май, 2006 21:28 ] |
Заголовок сообщения: | |
А реалии таковы что без шаманства над BB такое никак не сделать. Самое простое, это взять handle главного окна BB и сдвинуть его куда подальше, оставив видимым только окно калькулятора. Однако, что бы такой калькулятор работал придется таскать с ним приличное количество подсистем BB, общий вес которых будет около 1 Мб, а то и больше. Для простого калькулятора это многовато. |
Автор: | Илья Ермаков [ Воскресенье, 07 Май, 2006 00:00 ] |
Заголовок сообщения: | |
Цитата: На мой взгляд легче написать на BB калькулятор используя только Win32 API, а потом слинковать exe. Меньше трах-тибидохов будет.
А писать бизнес-приложение, работающее с отчетами, или приложение с научной графикой Вы тоже будете через WinApi? И те в разы большие "трах-тибидохи" вас не испугают? У ББ в том виде, в каком он есть сейчас, есть четкая сфера применения, под которую он подходит отлично: прикладные/деловые/научные приложения, которые ориентированы на работу с содержанием. Да, рюшечек каких-то на окошечках может не хватать, зато работу с документами, правку/показ разнородных объектов, внедренных друг в друга вы сделаете легче, чем где бы то ни было. Та же история с MFC в Visual Studio, кстати - там не так легко и очевидно реализовать все мелкие прихоти, как в той же Дельфе, не говоря о всяком Васике, зато намного легче выстраивать сложные профессиональные приложения, редакторы любого рода... А рюшечки всегда можно и докрутить. Будет вам и SDI, скоро будет. Да что говорить, в той же Дельфе нормального компонента для полноценной работы с текстовыми документами и то нет - RichEdit не предлагать ![]() Ну а теперь по самому вопросу. Итак, мы хотим делать свое приложение. Давайте по шагам. 1) Удобно под отдельный проект выделить специальную папочку, отдельно от BlackBox. Пусть Calc, например. Делаем ярлычок к BlackBox.exe, в котором пишем параметр командной строки: <ваш_путь>\BlackBox.exe /USE C:\MyProjects\Calc И рабочую папку тоже: C:\MyProjects\Calc. Теперь запускаем среду с этого ярлыка - и смело можем менять что угодно - любые конфигурационные файлы, даже родные модули среды - все изменения не затронут исходных версий, все будет сохраняться в Calc и перекрывать основную папку. 2) Давайте для начала заставим при старте программы запускаться наш калькулятор и уберем окно лога. Открываем модуль Config, Код: комментируем строку (* Dialog.Call("StdLog.Open", "", res); *) и добавляем команду Dialog.Call("ObxCalc.Deposit;StdCmds.Open", "", res); Deposit помещает в очередь отображений новый калькулятор, а StdCmds.Open открывает последнее отображение из очереди в Aux-диалоге. Перекомпилируем Config. Среду не закрываем, но запустим с ярлыка Calc еще одну копию. Как видим, калькулятор открывается и лог исчез. Если бы мы писали деловое приложение, то мы бы подредактировали меню, настроили поведение при запуске, и нам бы этого хватило с головой. Однако идем далее... 3) Нам надо убрать главное окно. Без главного окна можно работать только с Tool-диалогами, т.к. Aux-диалоги открываются внутри MDI, со стилем MDI_CHILD. Посему открывать сам калькулятор надо теперь в виде Tool-диалога. Однако нужного аналога команды StdCmds.Open, к сожалению нет. Если бы открывали диалог из файла, использовали бы OpenToolDialog... А тут придется использовать модуль более низкого уровня StdDialog (или можно было бы Windows). Пишем в Config следующее: Код: StdDialog.Open(ObxCalc.New(), "Мой калькулятор", NIL, "", NIL, TRUE, FALSE, TRUE, FALSE, TRUE). Перекомпилируем - проверим - открывается инструментальный диалог.4) Собственно, убирание главного окна. Для этого есть у BlackBox параметр командной строки /NOAPPWIN . Создадим файл Calc/System/Rsrc/CommandLine.txt с двумя строчками: Код: COMMANDLINE
/NOAPPWIN Запускаем снова с ярлычка - видим, что теперь есть только одно окно калькулятора. Можно воспользоваться и MtWindows.MDIOff. Там действительно "шаманство" с уводом главного окна за область экрана. Просто так можно его включать/выключать по мере надобности. 5) Ну и последний этап - сборка отдельного приложения. Обычный вариант - просто копируются нужные подсистемы Framework'а. Это около 1600 Кб. У меня, например, они отложены в отдельную папку, оставлено только то, что нужно. Вот архив: http://blackbox.metasystems.ru/download/runtime.rar (0,6 Мб). Сам файл BlackBox.exe перелинковывается с нужным ярлычком и переименовывается. Линковать статически все смысла нет - плюсов никаких - минусов много - в частности, теряем возможность легких обновлений и молниеносность загрузки в память, когда все остальное догружается потом, по мере надобности - а в линкованном виде будет грузиться сразу все. Однако, если есть желание, то можно и слинковать всю среду, как описано в DevLinker Docu. Только перед Kernel надо дописать National, если используется пакет русификации, и в хвост дописать ObxCalc и Config. Правда, необъектные файлы, типа CommandLine.txt придется таскать снаружи. Есть еще DevPacker, который позволяет упаковать в виртуальную файловую систему внутри Exe все, что угодно, при этом сохраняется инкрементная загрузка и расширяемость - положенные рядом файлы перекрывают припакованные. Однако в поставляемой конфигурации ББ драйвер упакованных файлов по умолчанию не загружается, его надо еще настраивать... |
Автор: | Илья Ермаков [ Воскресенье, 07 Май, 2006 00:30 ] |
Заголовок сообщения: | |
Хотя почему бы и не упаковать все в один EXE? Подправим Init - добавим в список импорта HostPackedFiles, перекомпилируем. Затем слинкуем exe, не забыв добавить перед Init HostPackedFiles. Затем к полученному exe припакуем с помощью DevPacker (см. документацию) два файла - System/Rsrc/CommandLine.txt и System/Rsrc/Menus.txt (дабы при старте не появлялось ругательное сообщение "Menu File Not Found"). Готово. Вот результат: ссылка устарела (1.2 Мб). |
Автор: | Grabli [ Воскресенье, 07 Май, 2006 08:28 ] |
Заголовок сообщения: | |
Хм. 1.2 Мб калькулятор. Помоему это не серьёзно. |
Автор: | Илья Ермаков [ Воскресенье, 07 Май, 2006 11:38 ] |
Заголовок сообщения: | |
Несерьезно. Стрелять из пушки по воробьям ![]() |
Автор: | Илья Ермаков [ Воскресенье, 07 Май, 2006 12:12 ] |
Заголовок сообщения: | |
А вот, кстати, провел интересный эксперимент - пожал ASPack'ом: ссылка устарела (400 Кб). Не ожидал, честно, что будет работать - у ББ структура EXE хитрая, его даже вирусня никакая не берет, проверено ![]() Однако надо сначала линковать, потом сжимать, а уже потом пришивать файлы DevPacker'ом (или включать опцию "сохранять экстра-данные в конце файла"), иначе пришитые файлы попортятся. А вот упаковщик UPX вызывает TRAP при запуске... А вообще-то можно написать аналог PackedFiles, который обеспечит сжатие сам по себе. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |