Вверх ↑
Ответов: 2059
Рейтинг: 131
#1: 2017-11-14 20:55:43 ЛС | профиль | цитата
Компоненты для встраивания Lua скрипта в Hiasm приложение. http://forum.hiasm.com/getfile/38616
Примеры http://forum.hiasm.com/getfile/38292
Не стал делать традиционным методом, как Visual Basic, или Java Script.
Все они заточены на статический кусок кода исполняемый в приложении.
Почему-бы тогда не выразить то-же самое в IC?
С Lua дела обстоят иначе. Lua позволяет создавать динамические структуры, создавать и уничтожать новые функции и переменные из основного приложения и
менять текст скрипта и всё это во время работы приложения. По этому его удобно использовать в качестве конфигурационного языка.
И вообще, Lua — это крошечный и простой язык.

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

Пара компонентов lua_getfunction и lua_HiFunction образуют Callback в Lua, или Hiasm, в зависимости от порядка их применения.

lua_HiFunction - компонент регистрирует имя функции (именованный кусок схемы), который потом можно вызвать из Lua.
Параметры в Hiasm передаются через правые точки.
Нижних точек не стал делать, потому что получается неуклюже приводить данные к определённому типу, или в TData + промежуточное хранение(никому не нужное) - аргументы берутся со стека, во всеми вытекающими...
Удалось найти хорошее решение на стыке языков. В Lua переменные динамического типа и принимают нужный тип в момент применения.
И не все типы, что есть в Lua можно протащить через точки - их очень много. Если нужна экзотика, то через IC.
Не цепляйте точку doRegisterF на точку onOUT компонента hiLuaScript, потому что это не конец чтения скрипта, а окончание работы виртуальной машины.
(скрипты могут подгружаться динамически, и выполнять свои функции.)

Hilua_getfunction - компонент вызывает функции определённые в Lua.
Аргументы подаются на верхние точки.
Результаты получаем из правых точек. Результатов функции Lua может быть несколько. Процедура - функция без результата.
Пустых верхних точек не должно быть. Это приведёт к ошибке.
Обработчика ошибок не стал делать из-за рентабельности, хотя такая возможность есть. Тогда придётся запускать функцию в защищённом режиме и отслеживать стек.
Лучше потом сделать отладчик... В dll это заложено. В dll заложены различные библиотеки, чтобы не париться, так что запускаемая виртуальная машина хорошо упакована. Dll имеет название lua5.1.dll и полностью совместима с обычной. В дальнейшем библиотеку можно завернуть в паскаль.
Нужно посмотреть не юзает её кто нибудь ещё из https://yadi.sk/d/2eFy5tu23PhPB3?

Установка обычная. Перетаскиваем ini файлы на поле Hiasm. lua5.1.dll кидаем в корень папки Hiasm.
Для контроля, скопировать все pas файлы в .\HiAsm\Elements\Delphi\code\.


Продолжение следует.
Следующие серии уже снимаются.
карма: 6

3
Голосовали:LainX, andrestudio, Vaeltaja
Редактировалось 7 раз(а), последний 2019-02-27 02:05:44