Я люблю Lua. I love Lua.

Вызов Lua функции

Posted in Uncategorized by ilovelua on Апрель 10, 2010

Итак, дан скрипт Lua (файл test1.lua):

local function fun(value)
  print('Value', value)
  return 1, 2, 3
end
 
return fun

Функция принимает на вход один аргумент и возвращает три значения.
Вызываем эту функцию из С:

#include "LuaUtil.h"
 
using namespace luautil;
 
int main(int argc, char* argv[])
{
  lua_State* L = lua_open();
 
  // загружаем все стандартные библиотеки
  luaL_openlibs(L);
 
  if(luaL_dofile(L, "../scripts/test1.lua"))
  {
    // что-то не так...
    printf("Error: %s\n", lua_tostring(L, -1));
  }
  else
  {
    // stack: function
    lua_pushnumber(L, 10); // stack: function 10
 
    if(lua_pcall(L, 1, 3, 0)) 
    {
      // что-то не так опять...
      printf("Error: %s\n", lua_tostring(L, -1));
    }
    else
    {
      // stack: ret1 ret2 ret3
      int ret1;
      int ret2;
      int ret3;
 
      getValue(L, -3, ret1);
      getValue(L, -2, ret2);
      getValue(L, -1, ret3);
 
      printf("Returned values are: %d, %d, %d\n", ret1, ret2, ret3);
    }
  }
 
  lua_close(L);
 
  return 0;
}

Результат работы программы:

Value   10
Returned values are: 1, 2, 3

Тестовый пример можно взять здесь.

Для написания статьи использовался markdown.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: