Автор Тема: Компонент для динамического вызова команд модулей (libBBox)  (Прочитано 9822 раз)

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Ещё в во второй половине года я разработал межплатформный компонент, позволяющий динамически вызывать команды из скомпилированных модулей: (libBBox и расширяемый framework).

Привожу цитату:
Цитата: Роман М.
Написал прототип компонента для вызова процедур посредством динамической загрузки модулей - в некотором роде аналог привычных многим исполняемых файлов 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? Вообще?

Таким образом, одинажды установив её в ОС, получим базовую платформу для запуска программ (как сейчас это делает графическая среда BlackBox Component Builder). Разница в том, что эта платформа может использоваться не только в системах с пользовательским интерфейсом, но и без него. Сказанное насчёт встраиваемых систем - пока сугубо теоретически.

Интересует ваше мнение.

Rifat

  • Jr. Member
  • **
  • Сообщений: 62
    • Просмотр профиля
Раз в начале была аналогия с RunDll32, то для начала выскажусь по поводу этой программы. Особую пользу от нее я не вижу, использовать ее мне не приходилось, но несколько раз встречался с вирусами, которые себя прописывали в автозапуск и запускались при помощи RunDll32, при этом в списке задач был RunDll32.

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
По поводу запуска модулей ББ при помощи новой утилиты, мне кажется это усложнением, если мы пишем программу для среды где нет графического интерфейса, то почему бы не собрать консольную программу для этой среды и так запускать.
Потому, что неразрушающий переход с ББ гуишного. Это рраз.
Два – теоретически, остается возможность горячей замены кода (загрузка новых версий модулей), и добавления кода.

Хотя, конечно, для Оберона и КП (но уже в меньшей степени), слепливание всех модулей в один екзешник это не такое уж и бесполезное занятие, то есть в некоторых случаях это было бы удобно. Вот скажем для ерланга подобная генерация exe'шника монолитного это полный бесмысленный маразм.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"