我试图从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);


这是导致崩溃的原因。

最佳答案

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

10-06 09:47