从C语言调用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)

我定义了自己的Lua库'mylib',其中包括一个C函数:

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

我将cIdxeIdx保留下来,直到我在以后的某个时间点收到某个外部事件,那时我想调用设置为参数的Lua脚本中的一个函数。在这里(在同一线程中,使用相同的lua_State *),我调用:

lua_rawgeti(L, LUA_REGISTRYINDEX, myCIndex);

这导致了崩溃。

原文链接 https://stackoverflow.com/questions/8557304

点赞
stackoverflow用户798374
stackoverflow用户798374

我的第一个建议是:不要在 C 中存储函数,只需将您的函数分配给 Lua 中的全局变量,然后在 C 中使用 Lua 状态 (L) 获取全局变量,推送参数,调用函数并使用结果。一旦这个正常工作了,您就有了基础并知道您的函数正在工作,您可以更改获取函数的方式以使用注册表。祝好运!

2012-08-03 22:48:36
stackoverflow用户373485
stackoverflow用户373485

正如 @Schollii 提到的那样,在执行了 lua_close(L) 之后,我进行了这个调用。

2012-08-08 22:14:43