OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 18 Апрель, 2024 06:43

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 06 Май, 2006 14:12 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Попробовал собрать exe'шник - из примеров модуля-компоновщика, таки все собралось (единственное что, документация несколько устарела - пришлось добавить модуль National, иначе блэкбоксы не собирались).

Но! Как вот собрать в виде отдельного exe'шника например калькулятор из стандартных примеров? Я попробовал - у меня exe-шник конечно получился, но он просто напросто вылетает с ошибкой. Хотя и ядро и все остальное там имеется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 06 Май, 2006 15:48 

Зарегистрирован: Суббота, 22 Апрель, 2006 21:30
Сообщения: 35
По моему мнению, линковка калькулятора из стандартных примеров это шаманство высшей степени.

Этот калькулятор целиком и полностью зависит от framework-а black box, поэтому, что бы сделать exe файл при запуске которого показался только калькулятор, придется колдовать над самим BB: прятать основное окно и т.д.

На мой взгляд легче написать на BB калькулятор используя только Win32 API, а потом слинковать exe. Меньше трах-тибидохов будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 06 Май, 2006 18:28 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Grabli писал(а):
По моему мнению, линковка калькулятора из стандартных примеров это шаманство высшей степени.

Этот калькулятор целиком и полностью зависит от framework-а black box, поэтому, что бы сделать exe файл при запуске которого показался только калькулятор, придется колдовать над самим BB: прятать основное окно и т.д.

На мой взгляд легче написать на BB калькулятор используя только Win32 API, а потом слинковать exe. Меньше трах-тибидохов будет.


Через Win32 API - кто угодно сможет. Если работать напрямую с Win32 API, то возможно какой-нибудь XDS будет более оптимальным нежели BB. По крайней мере там вроде как нет проблем с многопоточностью.

Вопрос же возник потому как сейчас реалии таковы, что на выходе обычно должен быть как раз вот такой вот exe'шник. И если этот простейший калькулятор действительно проще переписать на чистом Win32 API чем подправить его имеющийся в примерах так, чтобы получилось таки собрать его в экзешник, то игра не стоит свеч.

По крайней мере львиная доля примеров из стандартной документации становится просто напросто бесполезной т.к. знания полученные из этих примеров (работа с формами и пр.) при создании самостоятельных программ неприменимы.

Но я надеюсь что ты ошибаешься, и тот же калькулятор можно подправить а затем скомпоновать без особого геморроя, чтобы получился обычный виндовозный работающий экзешник.

Надеюсь кто-нибудь мне подскажет как это сделать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 06 Май, 2006 21:28 

Зарегистрирован: Суббота, 22 Апрель, 2006 21:30
Сообщения: 35
А реалии таковы что без шаманства над BB такое никак не сделать.
Самое простое, это взять handle главного окна BB и сдвинуть его куда подальше, оставив видимым только окно калькулятора.

Однако, что бы такой калькулятор работал придется таскать с ним приличное количество подсистем BB, общий вес которых будет около 1 Мб, а то и больше. Для простого калькулятора это многовато.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 07 Май, 2006 00:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
На мой взгляд легче написать на BB калькулятор используя только Win32 API, а потом слинковать exe. Меньше трах-тибидохов будет.

А писать бизнес-приложение, работающее с отчетами, или приложение с научной графикой Вы тоже будете через WinApi? И те в разы большие "трах-тибидохи" вас не испугают? У ББ в том виде, в каком он есть сейчас, есть четкая сфера применения, под которую он подходит отлично: прикладные/деловые/научные приложения, которые ориентированы на работу с содержанием. Да, рюшечек каких-то на окошечках может не хватать, зато работу с документами, правку/показ разнородных объектов, внедренных друг в друга вы сделаете легче, чем где бы то ни было. Та же история с MFC в Visual Studio, кстати - там не так легко и очевидно реализовать все мелкие прихоти, как в той же Дельфе, не говоря о всяком Васике, зато намного легче выстраивать сложные профессиональные приложения, редакторы любого рода... А рюшечки всегда можно и докрутить. Будет вам и SDI, скоро будет.
Да что говорить, в той же Дельфе нормального компонента для полноценной работы с текстовыми документами и то нет - RichEdit не предлагать :-) Поэтому единственным решением всегда было выходить на Word через COM.

Ну а теперь по самому вопросу. Итак, мы хотим делать свое приложение. Давайте по шагам.
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 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Хотя почему бы и не упаковать все в один EXE?
Подправим Init - добавим в список импорта HostPackedFiles, перекомпилируем. Затем слинкуем exe, не забыв добавить перед Init HostPackedFiles. Затем к полученному exe припакуем с помощью DevPacker (см. документацию) два файла - System/Rsrc/CommandLine.txt и System/Rsrc/Menus.txt (дабы при старте не появлялось ругательное сообщение "Menu File Not Found"). Готово.
Вот результат: ссылка устарела (1.2 Мб).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 07 Май, 2006 08:28 

Зарегистрирован: Суббота, 22 Апрель, 2006 21:30
Сообщения: 35
Хм. 1.2 Мб калькулятор. Помоему это не серьёзно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 07 Май, 2006 11:38 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Несерьезно. Стрелять из пушки по воробьям :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 07 Май, 2006 12:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
А вот, кстати, провел интересный эксперимент - пожал ASPack'ом:
ссылка устарела (400 Кб).
Не ожидал, честно, что будет работать - у ББ структура EXE хитрая, его даже вирусня никакая не берет, проверено :-)
Однако надо сначала линковать, потом сжимать, а уже потом пришивать файлы DevPacker'ом (или включать опцию "сохранять экстра-данные в конце файла"), иначе пришитые файлы попортятся.
А вот упаковщик UPX вызывает TRAP при запуске...
А вообще-то можно написать аналог PackedFiles, который обеспечит сжатие сам по себе.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


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

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


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

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