Доброго времени суток, уважаемые форумчане!
В данный момент разрабатываю проект, в котором gui написан на FPC, а логика работы должна быть обязательно на интерпретируемом языке, в частности LUA, т.к. в дальнейшем отладка у заказчика должна происходить без среды разработки. Таковы условия использования приложения и не изменятся.
Вопрос, помогите пожалуйста, кто знает хоть небольшим примером, как можно экспортировать целый класс формы TForm с ее методами для дальнейшего использования в Lua. Долгие дни "гугления" ни к чему не привели, много битых устаревших ссылок. Везде полно информации по экспорту простых функций из Delphi. Или наоборот даже - вызов Lua скриптов с "жёсткой" привязкой к элементам управления. Это не подходит, т.к. ставит в жёсткие рамки.
Необходима полная работа с классами форм из Lua, в частности, важна привязка функций скриптов Lua к элементам управления(по событиям onClick) из самих скриптов, а не из среды FPC.
Подходящую инфу по биндингу FPC для Lua нигде не встречал к сожалению, FPC как то обделили, а у него все таки есть немало своих особенностей, отличных от обвязки в других языках. Даже создатели CrystalLua пишут, что полноценной поддержки нет.
Просто Lua по всем параметрам подходит для написания логики приложения, потому не хотелось бы переходить на другой язык.
Заранее спасибо, за любую адекватную помощь.
Добавлено спустя 9 минут 4 секунды:
Хочу уточнить - требуемая версия Lua - 5.2. там добавился нужный оператор goto. В ней произошли некоторые изменения по сравнению с предыдущими версиями, и соотв. регистрация ф-ций и классов происходит несколько иначе.
Как сделать обвязку класса FPC Tform для использования в LUA
Модератор: Модераторы
С LUA не работал, но работал с PascalScript. Я эспортировал обычные функции, а эти функции уже вызывали методы класса или выполняли операции со свойствами формы. Также я делал, что внутри паскалевской программы я формировал нужный мне текст скрипта, составленный из отдельных кусков скрипта, написанных пользователем. Условно говоря, на каждое событие в паскале вызывается некий скрипт, а текст этого скрипта загружается из некого места по некому правилу.
Подходы вроде CrystalLUA — это дорога в ад. Скрипты должны работать на более высоком уровне, чем методы нативных классов. Гипотетический пример:
Да, для такого придётся написать отдельный класс-биндинг, но плюсы декларативного стиля и вообще высокоуровневости очевидны. А чтобы было откуда дёргать Lua-обработчики, достаточно сохранить ссылку на переданную таблицу.
Код: Выделить всё
form = CreateForm
{
caption = "test",
label_welcome =
{
what = "label",
x = 50, y = 50,
caption = "... placeholder.txt ..."
},
btn_hello =
{
what = "button",
x = 50, y = 80,
caption = "Hello",
onClick = function() ShowMessage("И тебе привет") end
}
}Да, для такого придётся написать отдельный класс-биндинг, но плюсы декларативного стиля и вообще высокоуровневости очевидны. А чтобы было откуда дёргать Lua-обработчики, достаточно сохранить ссылку на переданную таблицу.
Вижу никто не сталкивался с Lua... Спасибо тем, кто ответил!
В инете нахожу ссылки на файл pas2lua.pas, какой то wrapper для FPC/Delphi, но скачать его уже нет возможности - ссылки ведут на не существующий ресурс - eonclash.com. Может у кого-то случайно завалялся этот файл биндинга для FPC ?
В инете нахожу ссылки на файл pas2lua.pas, какой то wrapper для FPC/Delphi, но скачать его уже нет возможности - ссылки ведут на не существующий ресурс - eonclash.com. Может у кого-то случайно завалялся этот файл биндинга для FPC ?
exploitvn, в pLua был реализован как раз тот функционал, что вам надо.. только оно было очень все сырое, когда я смотрел в последний раз.. но это было давно.
На данный момент ссылка мертва, так что смотреть в машине времени
ps: pas2lua - с того же проекта..
pps: если найдете инфу - поделитесь, пожалуйста, это вопрос у меня тоже скоро будет актуален)
На данный момент ссылка мертва, так что смотреть в машине времени
ps: pas2lua - с того же проекта..
pps: если найдете инфу - поделитесь, пожалуйста, это вопрос у меня тоже скоро будет актуален)
Большое спасибо за ссылки на архивы, pLua - это действительно то что нужно, буду допиливать и использовать его. B4rr4cuda, а что Вы подразумеваете под "было очень все сырое"? Часто возникают ошибки во время использования?
exploitvn, я уже и не помню, если честно. То ли крэшилось, то ли не весь обьявленный функционал был запилен.. Но я смотрел его чуть ли не пять лет назад, поэтому думаю, что инфа неактуальна)
