从C调用Lua

时间:2011-12-19 05:03:29

标签: lua

我正在尝试从C调用用户定义的Lua函数。我已经看到了一些关于此的讨论,解决方案似乎很清楚。我需要使用luaL_ref()获取函数的索引,并保存返回的索引以供稍后使用。

就我而言,我已经用luaL_ref保存了值,而且我的C代码需要调用用luaL_ref保存的Lua函数。为此,我使用lua_rawgeti如下:

lua_rawgeti(l, LUA_REGISTRYINDEX, fIndex);

这会导致lua_rawgeti崩溃。

我使用的fIndex是我从luaL_ref收到的值,所以我不确定这里发生了什么。

编辑:

我正在运行Lua脚本,如下所示:

function errorFunc()
  print("Error")
end

function savedFunc()
  print("Saved")
end

mylib.save(savedFunc, errorFunc)

我已经使用C函数定义了我自己的Lua库'mylib':

static int save(lua_State *L) 
{
    int cIdx = myCIndex = luaL_ref(L, LUA_REGISTRYINDEX);
    int eIdx = luaL_ref(L, LUA_REGISTRYINDEX);

我将cIdx和eIdx保存到以后的某个时间点,当我收到一些外部事件时,我想在我的Lua脚本中调用一个设置为参数的函数。在这里,(在同一个线程上,使用相同的lua_State *),我调用:

lua_rawgeti(L, LUA_REGISTRYINDEX, myCIndex);

导致崩溃的原因。

2 个答案:

答案 0 :(得分:0)

我的第一个建议是让它在没有将功能存储在C中的情况下工作。只需将您的函数分配给Lua中的全局,然后在C中使用Lua状态(L)来获取全局,推送args,调用函数,并使用结果。一旦它工作,你已经掌握了基础知识,并且知道你的功能正在运行,你可以改变你使用注册表的功能。祝你好运!

答案 1 :(得分:0)

正如@Schollii所说,我在做了一个lua_close(L)后正在进行这个调用。