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

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

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

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

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

Сообщение MageSlayer »

Хай

Использую 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 12:38:47, всего редактировалось 1 раз.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Для работы с LUA использую только LuaAPI. PLua никогда не использовал.
попробуйте посмотреть тип значения после возврата из функции

Код: Выделить всё

lua_type(L,-1)

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

Сообщение MageSlayer »

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

Код: Выделить всё

lua_type(L,-1)



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

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

Так и сделал :)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

MageSlayer
Я смотрю люди не очень стремятся разобраться с вашим вопросом (и на lua.ru тоже тишина).
Выкладывайте код где возникает ошибка. Будем разбираться :wink:
MageSlayer
постоялец
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Сообщение MageSlayer »

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.

Еще раз спасибо за содействие.
Ответить