Lua. Проблема с возвратом результатов [SOLVED]

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Lua. Проблема с возвратом результатов [SOLVED]

Сообщение MageSlayer » 25.10.2009 17:53:20

Хай

Использую pLua.
Пытаюсь заставить работать элементарный пример на Lua
Код: Выделить всё
local R = ObjC(1, 2)
N = R.Name
return R


Объект R нормально создается функцией Obj из FreePascal. То есть биндинг ObjC для Lua сделан правильно. Нормально отрабатывает вызов функции Name.
А вот когда дело доходит до возрата самого объекта - вываливается AV.

Код запуска скрипта:
Код: Выделить всё
  ErrorTest(lua_pcall(L, 0, LUA_MULTRET, 0));

  //когда вместо объекта возвращаю обычное число, то все ок
  result:=lua_tointeger(l, -1);

  //а так выпадает исключение
  Result:=plua_getObject(l, -1);


Может кто чего подскажет?
Последний раз редактировалось MageSlayer 26.10.2009 13:38:47, всего редактировалось 1 раз.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Lua. Проблема с возвратом результатов

Сообщение Mr.Smart » 25.10.2009 18:52:09

Для работы с LUA использую только LuaAPI. PLua никогда не использовал.
попробуйте посмотреть тип значения после возврата из функции
Код: Выделить всё
lua_type(L,-1)

а вообще задайте свой вопрос ещё и на форуме lua.ru
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Lua. Проблема с возвратом результатов

Сообщение MageSlayer » 25.10.2009 19:06:11

Mr.Smart писал(а):Для работы с LUA использую только LuaAPI. PLua никогда не использовал.
попробуйте посмотреть тип значения после возврата из функции
Код: Выделить всё
lua_type(L,-1)



На выходе тип 5. Судя по документации - это таблица.
Как-то надо разобраться что же там все-таки лежит, в этой таблице.

Mr.Smart писал(а):а вообще задайте свой вопрос ещё и на форуме lua.ru

Так и сделал :)
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Lua. Проблема с возвратом результатов

Сообщение Mr.Smart » 26.10.2009 13:03:03

MageSlayer
Я смотрю люди не очень стремятся разобраться с вашим вопросом (и на lua.ru тоже тишина).
Выкладывайте код где возникает ошибка. Будем разбираться :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Lua. Проблема с возвратом результатов

Сообщение MageSlayer » 26.10.2009 13:38:24

Mr.Smart писал(а):MageSlayer
Я смотрю люди не очень стремятся разобраться с вашим вопросом (и на lua.ru тоже тишина).
Выкладывайте код где возникает ошибка. Будем разбираться :wink:


Спасибо за предложение.
Я уже разобрался. Когда вы подсказали посмотреть lua_type(L,-1) и там оказалась таблица это навело на мысль о том, работает все правильно, просто я пытаюсь неправильно снять результат со стека Lua.

Проблема в итоге решилась очень просто.
Этот код выглядит правильно пока не заглянешь внутрь plua_getObject.
Код: Выделить всё
Result:=plua_getObject(l, -1);


В общем, в plua_getObject при отрицательных значениях индекса стека происходит обращение не к тому элементу. Если код заменить на:
Код: Выделить всё
  tix:=lua_gettop(l);
  if lua_type(L,-1) = LUA_TTABLE then
    Result:=plua_getObject(l, tix);

... то объект успешно снимается со стека.
Похоже что, это баг в pLua.

Еще раз спасибо за содействие.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44


Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru