|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Вяжем LUA с Delphi
АПИ луа предоставляет возможность вязать код твоей программы с именами функций в скрипте, для этого используется lua_register(Lua, 'foo', @foo); Так вот, при вызове функции foo (которая должна быть cdecl и единственный аргумент у нее - дескриптор луа), чтобы получить параметры, которые были переданы в эту ф-ю приходится использовать lua_tointeger(Lua, 1); (где 1 - порядковый номер аргумента).
Собственно вопрос в следующем, как-то можно получить кол-во параметорв (пока что вертится вариант запроса поинтера), и как лучше организовать прослойку между луа и кодом, чтоб не писать такую билеберду, а чтоб менеджер сам подсовывал параметры? Сейчас есть вариант пробегания по стеку луа и генерация кода типа push blabla; .. push blabla; call foo; З.Ы. lua_type возвращает тип переменной, т.е. можно делать while (lua_type(...) <> LUA_TNONE) do и определить кол-во параметров. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 17.06.2013 в 21:07. |
#2
|
|||
|
|||
a = lua_gettop(L);
a будет содержать количество параметров. Насчет лучшей организации не знаю, я делал через АПИ Луа |
#3
|
||||
|
||||
Спасибо и на этом.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
У Lua есть такой прикол, если из API вызвать несуществующую в скрипте функцию, вываливается ошибка Майкрософт рантайм лайбрари и программа закрывается.
Этот момент можно обработать (или проверку наличия функции осуществить)? — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
Хм, у меня выводит сообщение Attemt to call global <fnc name> (a nil value)
|
#6
|
||||
|
||||
Я делаю так:
Код:
lua_getglobal(ALua, 'Foo'); lua_pushinteger (ALua, ...); lua_call(ALua, 1, 1); — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
|||
|
|||
Черт, я делаю через pcall.
Так вот же, после get_global на верхушке стека по идее должен лежать nil, если функции нету |
#8
|
||||
|
||||
Ок, спасибо, завтра попробую. С верхушки стека снимать ф-ей lua_gettop?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
|||
|
|||
Не, lua_gettop число дает.
Есть API PHP код:
PHP код:
|
#10
|
||||
|
||||
Еще раз спасибо. Надо курнуть ман по луа как следует.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |