我试图从C中调用用户定义的Lua函数。我已经看到了一些关于此的讨论,并且解决方案似乎很清晰。我需要用luaL_ref()来获取函数的索引,并保存返回的索引以备后用。从C调用Lua
在我的情况下,我用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);
我将cIdx和eIdx保存到一个稍后的时间点,当我收到一些外部事件时,我希望在我的Lua脚本中调用其中一个设置为参数的函数。在这里,(在相同的线程上,使用相同的lua_State *),我打电话:
lua_rawgeti(L, LUA_REGISTRYINDEX, myCIndex);
这是导致崩溃。
为了回答这个问题,我们需要看看你在哪里得到你想要调用的“用户定义的Lua函数”,以及如何将它存储在注册表中。 – 2011-12-19 06:41:37
可能重复[如何从ac函数回调lua函数](http://stackoverflow.com/questions/2688040/how-to-callback-a-lua-function-from-ac-function) – finnw 2011-12-19 20:29:30
看来,问题在于我称lua_rawgeti的点在我称为lua_close(L)之后运行。 – jimt 2011-12-20 06:51:16