我正在尝试从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);
导致崩溃的原因。
答案 0 :(得分:0)
我的第一个建议是让它在没有将功能存储在C中的情况下工作。只需将您的函数分配给Lua中的全局,然后在C中使用Lua状态(L)来获取全局,推送args,调用函数,并使用结果。一旦它工作,你已经掌握了基础知识,并且知道你的功能正在运行,你可以改变你使用注册表的功能。祝你好运!
答案 1 :(得分:0)
正如@Schollii所说,我在做了一个lua_close(L)后正在进行这个调用。