OberonCore https://forum.oberoncore.ru/ |
|
Запуск команд модулей без необходимости в GUI https://forum.oberoncore.ru/viewtopic.php?f=47&t=2884 |
Страница 1 из 1 |
Автор: | Роман М. [ Пятница, 01 Октябрь, 2010 18:42 ] |
Заголовок сообщения: | Запуск команд модулей без необходимости в GUI |
Написал прототип компонента для вызова процедур посредством динамической загрузки модулей - в некотором роде аналог привычных многим исполняемых файлов C/C++, у которых есть процедура main с параметрами командной строки argc, argv. Это своего рода аналог майкрософтовского RunDll32, который умеет вызывать процедуры из библиотек. Для вызова процедур не требуется наличие BlackBox, нужен лишь загрузчик этих модулей. А далее за работу отвечает загруженный компонент, как типичная исполняемая программа. В исполняемом модуле (например, TestExeModule) мы объявляем для экспорта процедуру main, в которую извне будут передаваться аргументы для программы. В состав загрузчика входит компонент, скомпонованный в библиотеку bbldr[.dll/.so]. Для его работы необходима подсистема System (подсистема Host уже скомпонована внутри библиотеки) и подсистемы для вызова исполняемого модуля (допустим, TestExeModule), то есть файлы .ocf и .osf. Код: DEFINITION LibsModLoader ["bbldr"]; IMPORT Dynamics; TYPE TLoaderError = POINTER TO RECORD n-: INTEGER; msg-, par0-, par1-: Dynamics.String END; PROCEDURE GetLoaderError (OUT e: TLoaderError); PROCEDURE InitLoaderError (p: TLoaderError); PROCEDURE Run (_module, _proc: Dynamics.String; argc: INTEGER; argv: Dynamics.ArgList); END LibsModLoader. Эту библиотеку подгружает вспомогательная программа, которая принимает параметры командной строки и передаёт их исполняемому модулю. В командной строке запуск производится командой: Код: loader_program <Module_Name> <Procedure_Name> [arguments] На данный момент вспомогательная программа написана на Free Pascal (FPC). Планирую написать её на Обероне-2 посредством какого-нибудь из межплатформных компиляторов. Здесь нужны ваши советы насчёт выбора. Требование: создание исполняемых файлов для платформы x86, OS Windows, Linux. Взять ли XDS или есть варианты лучше? Текущим ограничением в запуске модулей является поддержка одной платформы x86, ОС Windows (NT/2000/XP) с форматами EXE/DLL и Linux с форматом библиотеки so (открытой поддержки исполняемых ELF пока нет). Считаю, что интеграция КП-модулей в родные ОС важна. Иначе общего признания не добиться. Я вижу данный инстумент как частичную замену среды BlackBox для динамического запуска модулей. В итоге хотелось бы иметь компактный и расширяемый framework, подобный .NET, на основе Компонентного Паскаля с набором подсистем универсального назначения, включая работу с БД, сетью и пользовательским интерфейсом (GUI/TUI). Также хотелось бы добиться распространения на разных аппаратных платформах, и, возможно, с упором на встраиваемые системы... Каковы, на ваш взгляд, перспективы такого средства в Linux? В Windows? Вообще? |
Автор: | Иван Денисов [ Пятница, 05 Ноябрь, 2010 20:49 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
Рома, мне нравиться твоя идея. Начать с динамической загрузки модулей а там и до каркаса добраться понемногу можно. Для линукса нужно будет сделать репозиторий с пакетами deb на сайте oberoncore.ru и просто скачивать их менеджером пакетов, как это сделано для питона и php. Там и контроль версий хороший для пакетов deb сделан уже!!! Я пробовал использовать Оксфордский компилятор для Linux, он работает точно и в нем есть поддержка DLL и SO, вроде, тоже была. Получаются бинарники .ELF, то есть полноценные Linux приложения. Так что можешь на нем попробовать собрать компилятор. |
Автор: | Info21 [ Суббота, 06 Ноябрь, 2010 11:40 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
Не понял, почему нельзя просто так модули грузить, безо всякого main. ТРАП показывает $$ про раздел инициализации или что-то в этом роде. То есть некое внутреннее имя как бы уже есть. Вы хотите, в сущности, его заменить на main? Мне не нравится слово main, какие-то ненужные ассоциации. ------ Что значит, без Блэкбокса. Без графики? Так это и так можно. (Четто не понимаю. Наверное, мозг расслабился на праздниках.) |
Автор: | Роман М. [ Воскресенье, 07 Ноябрь, 2010 13:41 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
divan, спасибо за ссылку. Но речь не о сборке компилятора, а о сборке программы для выполнения команд модулей (так будет точнее по понятиям Оберона). Исполняемость нужна для того, чтобы эта программа могла запускаться в родной ОС (так же, как запускается blackbox.exe) и выполнять команды из указанных модулей (так же, как запускает их blackbox.exe). Но не подгружая для этого OS-native GUI. Loader (frontend) пишу на XDS, а библиотека libBBox (backend) уже скомпонована с помощью BlackBox. Вложение: Info21 писал(а): Не понял, почему нельзя просто так модули грузить, безо всякого main. ТРАП показывает $$ про раздел инициализации или что-то в этом роде. То есть некое внутреннее имя как бы уже есть. Вы хотите, в сущности, его заменить на main? Мне не нравится слово main, какие-то ненужные ассоциации. ------ Что значит, без Блэкбокса. Без графики? Так это и так можно. (Четто не понимаю. Наверное, мозг расслабился на праздниках.) Да, без графики. См. выше диаграмму вызова. Слово main можно поменять на Run или Do. P.S. Я и не сразу заметил то, что проявили интерес к моей теме. |
Автор: | Info21 [ Воскресенье, 07 Ноябрь, 2010 14:41 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
Признаюсь, запутался. |
Автор: | Роман М. [ Среда, 10 Ноябрь, 2010 18:03 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
Разместил в SVN код Fwk (Lite BlackBox Framework) проекта CP-Dev (который Component Pascal compiler, консольный). Налаживаю передачу параметров argc, argv, а с загрузкой без них уже всё завершено. На Linux/Win32. В дальнейшем Fwk послужит для обеих целей: для динамического вызова команд с консоли и для использования каркаса консольным компилятором на поддерживаемых платформах. Приветствуется помощь в доработке Fwk:
Кто хочет помочь - обращайтесь ко мне (через страничку Support на CP-Dev). Так дело пойдёт быстрее. |
Автор: | Роман М. [ Понедельник, 29 Ноябрь, 2010 13:51 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
Наконец-то наладил передачу параметров через вызов команд. Уже работает в Win32! С помощью вызова в консоли "testldr.exe TestExeModule Do 123" запустился модуль TestExeModule с заданным параметром "123". |
Автор: | Kubanych [ Суббота, 03 Март, 2012 08:47 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
Уважаемый Роман. В каком состоянии сейчас этот Ваш проект? Есть ли возможность в Линуксе консольно запускать не включенные в .so модули? |
Автор: | Роман М. [ Суббота, 03 Март, 2012 19:32 ] |
Заголовок сообщения: | Re: libBBox и расширяемый framework |
Kubanych писал(а): Уважаемый Роман. Проектом я его не назову. Так, маленький инструмент - консольный пускач команд, аналогичный вызову команд мышкой из среды BlackBox по значку !.В каком состоянии сейчас этот Ваш проект? Есть ли возможность в Линуксе консольно запускать не включенные в .so модули? Если в среде ББ запускаем так: Код: !MyModule.Run то с помощью консольного пускача Код: testldr MyModule Run <параметры> Разработка находится в замороженном состоянии со времени предыдущего сообщения. С тех пор прошло уже более года. Насколько я помню, достиг стабильного запуска команд пускача с передачей параметров через командную строку в ОС Windows. Что вышло с Linux не могу вспомнить. Была, наверно, какая-то заморочка и зависимость от чего-то другого. Чтобы сказать поточнее, нужно заново покопаться. Так что постараюсь дать ответ в ближайшие дни. По крайней мере, этот экспериментальный интсрумент точно не подойдёт на этом этапе для запуска в режиме полной нагрузки - его ещё нужно отладить и "отшлифовать". Тем более, ещё потребуется наладить корректную инициализацию модуля Kernel, без которой сборщик мусора рушится. Хотя, это уже технический нюанс. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |