【发布时间】:2011-12-19 05:03:29
【问题描述】:
我正在尝试从 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);
导致崩溃的原因。
【问题讨论】:
-
为了回答这个问题,我们需要看看你从哪里得到你试图调用的“用户定义的 Lua 函数”,以及你如何在注册表中存储它。
-
看来问题在于我调用 lua_rawgeti 的点是在我调用 lua_close(L) 之后运行的。
-
在调用 lua_close(L) 后,任何情况下都不要在 lua_State L 上使用 Lua C api ;)
-
@jimt 我建议自己回答或删除,这样问题就不会保持开放。
标签: lua