我试图从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,调用函数并使用结果。一旦工作了,您就具备了基础知识,并且知道您的函数正在工作,您可以更改获取函数的方式以使用注册表。祝好运!