OberonCore
https://forum.oberoncore.ru/

DevPacker
https://forum.oberoncore.ru/viewtopic.php?f=1&t=11
Страница 1 из 1

Автор:  Илья Ермаков [ Пятница, 18 Ноябрь, 2005 01:12 ]
Заголовок сообщения:  DevPacker

Вот, друзья, проблемка возникла. Вчера попробовал использовать DevPacker. Не работает! Даже примеры из документации. Просто виснет наглухо.
Кто-нибудь с этим модулем работал?

Автор:  Вячеслав Бойко [ Понедельник, 21 Ноябрь, 2005 19:34 ]
Заголовок сообщения: 

Странно, примеры из документации работают... А можно на код посмотреть?

Автор:  Илья Ермаков [ Понедельник, 21 Ноябрь, 2005 19:43 ]
Заголовок сообщения: 

(КОМАНДЕР) DevPacker.PackThis bbpacked.exe := "Text/Rsrc/Strings.odc" "Text/Rsrc/Menus.odc"
"Text/Rsrc/Cmds1.odc" "Text/Rsrc/Cmds.odc"
"Text/Code/Views.ocf" "Text/Code/Setters.ocf"
"Text/Code/Rulers.ocf" "Text/Code/Models.ocf" "Text/Code/Mappers.ocf"
"Text/Code/Controllers.ocf" "Text/Code/Cmds.ocf"
"System/Code/Windows.ocf" "System/Code/Views.ocf"
"System/Code/Strings.ocf" "System/Code/Stores.ocf"
"System/Code/Services.ocf" "System/Code/Sequencers.ocf" "System/Code/Properties.ocf"
"System/Code/Printing.ocf" "System/Code/Printers.ocf" "System/Code/Ports.ocf"
"System/Code/Out.ocf" "System/Code/National.ocf" "System/Code/Models.ocf"
"System/Code/Meta.ocf" "System/Code/Mechanisms.ocf" "System/Code/Math.ocf"
"System/Code/Log.ocf" "System/Code/Kernel.ocf" "System/Code/Integers.ocf"
"System/Code/Init.ocf" "System/Code/In.ocf" "System/Code/Fonts.ocf"
"System/Code/Files.ocf" "System/Code/Documents.ocf" "System/Code/Dialog.ocf"
"System/Code/Dates.ocf" "System/Code/Converters.ocf" "System/Code/Controls.ocf"
"System/Code/Controllers.ocf" "System/Code/Containers.ocf" "System/Code/Config.ocf"
"System/Rsrc/Strings.odc"
"Std/Rsrc/ViewSizer.odc" "Std/Rsrc/TabViews.odc" "Std/Rsrc/Tables.odc"
"Std/Rsrc/Strings.odc" "Std/Rsrc/Stamps.odc" "Std/Rsrc/Scroller.odc"
"Std/Rsrc/Links.odc" "Std/Rsrc/Headers.odc" "Std/Rsrc/Folds.odc"
"Std/Rsrc/Coder.odc" "Std/Rsrc/Cmds1.odc" "Std/Rsrc/Cmds.odc"
"Std/Code/ViewSizer.ocf" "Std/Code/TabViews.ocf" "Std/Code/Tables.ocf"
"Std/Code/Stamps.ocf" "Std/Code/Scrollers.ocf" "Std/Code/MenuTool.ocf"
"Std/Code/Logos.ocf" "Std/Code/Log.ocf" "Std/Code/Loader.ocf"
"Std/Code/Links.ocf" "Std/Code/Interpreter.ocf" "Std/Code/Headers.ocf"
"Std/Code/Folds.ocf" "Std/Code/ETHConv.ocf" "Std/Code/Dialog.ocf"
"Std/Code/Debug.ocf" "Std/Code/Coder.ocf" "Std/Code/Cmds.ocf"
"Std/Code/Clocks.ocf" "Std/Code/CFrames.ocf" "Std/Code/Api.ocf"
"Sql/Code/Odbc3.ocf" "Sql/Code/Odbc.ocf"
"Sql/Code/Drivers.ocf" "Sql/Code/DB.ocf"
"Sql/Code/Controls.ocf" "Sql/Code/Browser.ocf"
"Ole/Code/Views.ocf" "Ole/Code/Storage.ocf" "Ole/Code/Server.ocf"
"Ole/Code/Data.ocf" "Ole/Code/Client.ocf"
"Host/Rsrc/Strings.odc" "Host/Rsrc/Setup.odc" "Host/Rsrc/Printing.odc"
"Host/Rsrc/Prefs.odc" "Host/Rsrc/Imptype.odc"
"Host/Code/Windows.ocf" "Host/Code/TextConv.ocf" "Host/Code/TabFrames.ocf"
"Host/Code/Registry.ocf" "Host/Code/Printers.ocf" "Host/Code/Ports.ocf"
"Host/Code/Pictures.ocf" "Host/Code/PackedFiles.ocf" "Host/Code/Menus.ocf"
"Host/Code/Mechanisms.ocf" "Host/Code/Mail.ocf" "Host/Code/Fonts.ocf"
"Host/Code/Files.ocf" "Host/Code/Dialog.ocf" "Host/Code/Cmds.ocf"
"Host/Code/Clipboard.ocf" "Host/Code/CFrames.ocf" "Host/Code/Bitmaps.ocf"
"Form/Code/Views.ocf" "Form/Code/Models.ocf" "Form/Code/Gen.ocf"
"Form/Code/Controllers.ocf" "Form/Code/Cmds.ocf"
"Form/Rsrc/Strings.odc" "Form/Rsrc/Menus.odc" "Form/Rsrc/Gen.odc"
"Form/Rsrc/Cmds2.odc" "Form/Rsrc/Cmds.odc"


bbpacked уже лежит в корневой директории BB.

Автор:  Вячеслав Бойко [ Понедельник, 21 Ноябрь, 2005 21:03 ]
Заголовок сообщения: 

Первый раз увидел как завис BlackBox :) Получается так: для упаковки списка файлов, надо вызвать
"DevPacker.ListFromSub('Имя директории')", которая и вызовет команду упаковки для всех файлов директории, тогда все работает. Если попытаться скопировать сгенерированную команду и вставить ее в новый документ, - все виснет на этапе сортировки, хотя сгенерированный ListFromSub и "скопированный" документы ничем визуально не отличаются. Буду разбираться

Автор:  Илья Ермаков [ Понедельник, 21 Ноябрь, 2005 21:20 ]
Заголовок сообщения: 

Я подозреваю (и даже уверен), что это из-за кодировок. Это единственная проблема в ББ! Дело в том, что текст, выглядящий в документах совершенно одинаково и лежащий рядом, может быть записан в разных кодировках!

Изначально ББ делался на ANSI, потом перевели на Юникод (тип CHAR = 16бит). Но - перевели совсем не полностью, т.к. в Европе проблема с кодировками остро не стоит. Все системные вызовы - не-юникод, а надо переводить на версии W. Над этим Горячев сейчас работает, но пока не доделано.

Автор:  Вячеслав Бойко [ Понедельник, 21 Ноябрь, 2005 21:24 ]
Заголовок сообщения: 

Если поставить "черный треугольничек" (см. примеры в документации) в конце списка файлов для упаковки, тогда все работает :D Возникает вопрос: что есть "черный треугольничек"? :)

Автор:  Илья Ермаков [ Понедельник, 21 Ноябрь, 2005 21:31 ]
Заголовок сообщения: 

А! Это парное отображение к командиру. Завершает список его аргументов, если не используются кавычки. См. DevCommanders.

Тогда все встает на свои места!

Автор:  Вячеслав Бойко [ Вторник, 22 Ноябрь, 2005 13:34 ]
Заголовок сообщения: 

Остается открытым вопрос: почему BB зависает, а не выдает сообщение об ошибке? Почему в некоторых случаях не требуется завершать список аргументов этим парным отображением командеру?
Например:
(commander)DevCompiler.CompileThis ObxViews1 ObxViews2 ObxViews3 -прекрасно работает.
И еще :) где в меню находится "Insert EndCommander"?

Автор:  Вячеслав Бойко [ Вторник, 22 Ноябрь, 2005 14:10 ]
Заголовок сообщения: 

С последним вопросом разобрался. Вдруг кому пригодиться... В файле ../Dev/Rsrc/Menus.odc вставить следующую строку в секции " MENU "Tools" " :
"Insert EndCommander" "*Q" "DevCommanders.DepositEnd; StdCmds.PasteView" "StdCmds.PasteViewGuard"

(см. Info21olimp/Docu/Введение.odc)

Автор:  Марат [ Вторник, 22 Ноябрь, 2005 18:00 ]
Заголовок сообщения:  ЧЕРНЫЙ ЯЩИК

Здравствуйте Дорогие Друзья!!!
У меня такая проблема: не как не могу программу сохранить как ".exe" - файл кто знает помогите пожалуйста...

Автор:  Вячеслав Бойко [ Вторник, 22 Ноябрь, 2005 18:32 ]
Заголовок сообщения:  Re: ЧЕРНЫЙ ЯЩИК

Марат писал(а):
Здравствуйте Дорогие Друзья!!!
У меня такая проблема: не как не могу программу сохранить как ".exe" - файл кто знает помогите пожалуйста...


Здравствуй!
Решение твоей проблемы содержиться в описании DevLinker

Автор:  Вячеслав Бойко [ Вторник, 22 Ноябрь, 2005 18:41 ]
Заголовок сообщения: 

Ответ Марату мой :) (забыл войти в форум)

Автор:  Илья Ермаков [ Вторник, 22 Ноябрь, 2005 21:07 ]
Заголовок сообщения:  Re: ЧЕРНЫЙ ЯЩИК

Марат писал(а):
Здравствуйте Дорогие Друзья!!!
У меня такая проблема: не как не могу программу сохранить как ".exe" - файл кто знает помогите пожалуйста...


Здравствуйте!
Рад видеть, что наш форум растет! :-)

В каком смысле "сохранить как exe-файл"?
С помощью DevLinker? Тогда опишите поконкретнее, что именно требуется...

Автор:  Марат [ Среда, 23 Ноябрь, 2005 19:52 ]
Заголовок сообщения:  ЧЕРНЫЙ ЯЩИК

Илья Ермаков писал(а):
Марат писал(а):
Здравствуйте Дорогие Друзья!!!
У меня такая проблема: не как не могу программу сохранить как ".exe" - файл кто знает помогите пожалуйста...


Здравствуйте!
Рад видеть, что наш форум растет! :-)

В каком смысле "сохранить как exe-файл"?
С помощью DevLinker? Тогда опишите поконкретнее, что именно требуется...


Ну как сказать))) "например: я писал программу " калькулятор " - и я хочу чтоб это программа (калькулятор) открылось без с помощью Black box (a), а как "ехе" файл" :shock: :cry:

Автор:  Илья Ермаков [ Среда, 23 Ноябрь, 2005 22:05 ]
Заголовок сообщения: 

Вообще-то, в BlackBox существует несколько способов создать конечное приложение:

1) Скопировать файл BlackBox.exe, переименовав его во что-то свое. Скопировать те файлы, которые нужны для работы вашего приложения. (Какие? см. выше, но там список с некоторым запасом. У подсистемы Dev особый статус. Когда ББ был коммерческим, ее распространять запррещалось. Сейчас - GNU, но все же... Если ваше приложение использует Dev, то это квалифицируется как наибольшая зависимость его от среды, со всеми вытекающими...) Подправить файл System/Rsrc/Menus, дабы меню были свои. Затем подправить модуль System/Mod/Config, в котором определена единственная процедура Setup - она вызывается при запуске. Оттуда можно убрать команду открытия окна Лога и привесить что-то свое. Чтобы выполнить что-то до запуска графического интерфейса, надо создать аналогичный модуль Startup. Ну, там ,например, можно изменить название главного окна приложения (чтобы оно отличалось от имени exe): Dialog.appName := "My Advanced Application". С русским названием следует быть осторожным - у нас возникли проблемы с сохранением настроек (HostRegistry использует для этого ветку как раз с именем oberon/appName). Но это мелочи, если понадобиться, можно русифицировать, не такое исправляли :-)
Приложение так и остается в виде множества модулей. Преимущества? Для большого пакета - легкость обновления и расширений, что, собственно, и является коньком Оберонов. Что делать, если не хочется такой "лапши"?
2) Все то же самое, но отобранные кодовые файлы компонуются в EXE. То есть, вся среда BB пересобирается под нужды вашего приложения. См. документацию DevLinker. Проще пареной репы. Я лично не сторонник статической компоновки всех модулей, но использую Linker для пересборки exe-шника с другими значками.
В этом случае все ресурсные файлы остаются лежать открыто.
3) В дополнение ко всему предыдущему - упаковать часть или все файлы (это могут быть и кодовые, и ресурсы) в exe-шник DevPacker-ом, создав в нем виртуальную файловую систему. В полном смысле этого слова. Возможны интересные фишки, когда в exe-шник зашиваются файлы по адресу, например, Z:\myfile, и они будут доступны под этим адресом из программы, даже если на машине такого диска нет вообще. То есть, файлы виртуальной системы перекрывают собой реальные, а если в ВФС файл не найден, то потом уже он ищется в реальной ФС. КОдовые файлы, в отличие от скомпонованных статически, будут все равно подгружаться динамически, но уже из ВФС (имхо, применение этому найти трудно).

Если ваша программа использует GUI, то нужно нести (открыто ли, линкованно ли, пакованно ли) Form, если используете тексты, то Text, и т.п. И интерфейс будет работать в MDI-варианте.

Совершенно другой вариант: отвязаться от всех или части стандартных подсистем ББ и написать именно то, что нужно. Через WinAPI, например. Ядро можно пересобрать как угодно! Можно сделать классический экзешник для безоконного (или оконного, зашив туда вызовы к WinAPI и цикл сообщений) приложения очень маленького размера. Можно собрать exe только из своих файлов, не включая даже Kernel! Тогда не будет работать сборка мусора, динамическое выделение памяти, динамический контроль типов и т.п., но для небольших сверхбыстрых приложений это может оказаться тем, что надо. Память все равно можно выделять через вызовы к ОС и небезопасные указатели SYSTEM.ADDR.

И это еще не все... Где искать информацию? Начать с Руководства пользователя-Подсистема Dev. Далее - DevLinker и DevPacker. И, на закуску, Особенности платформы (Platform-Specific Issues).

Но легко сделать не-MDI интерфейс сейчас нельзя. У нас есть задумка сделать вариант подсистемы Host (эта, так сказать, OS Abstraction Layer в BlackBox), которая создает не MDI, а свободные окна, по типу Дельфы. Это, имхо, не очень сложно. (Создание главного окна и цикл сообщений там стоит в HostMenus)

Автор:  Марат [ Пятница, 25 Ноябрь, 2005 18:29 ]
Заголовок сообщения:  хе-хе

Вячеслав Бойко писал(а):
Ответ Марату мой :) (забыл войти в форум)
аха каждый раз забываю... :D :lol: :mrgreen:

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/