从C呼叫Lua

从C呼叫Lua,lua,Lua,我试图从C调用一个用户定义的Lua函数。我已经看到了一些关于这个的讨论,解决方案似乎很清楚。我需要用luaL_ref()获取函数的索引,并保存返回的索引以供以后使用 在我的例子中,我用luaL_ref保存了值,我的C代码需要调用用luaL_ref保存的Lua函数。为此,我使用Lua_rawgeti,如下所示: lua_rawgeti(l, LUA_REGISTRYINDEX, fIndex); function errorFunc() print("Error") end functio

我试图从C调用一个用户定义的Lua函数。我已经看到了一些关于这个的讨论,解决方案似乎很清楚。我需要用luaL_ref()获取函数的索引,并保存返回的索引以供以后使用

在我的例子中,我用luaL_ref保存了值,我的C代码需要调用用luaL_ref保存的Lua函数。为此,我使用Lua_rawgeti,如下所示:

lua_rawgeti(l, LUA_REGISTRYINDEX, fIndex);
function errorFunc()
  print("Error")
end

function savedFunc()
  print("Saved")
end

mylib.save(savedFunc, errorFunc)
这导致了lua_rawgeti的车祸

我使用的fIndex是我从luaL_ref收到的值,所以我不确定这里发生了什么

编辑:

我正在运行一个Lua脚本,如下所示:

lua_rawgeti(l, LUA_REGISTRYINDEX, fIndex);
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_状态*),我调用:


这是导致崩溃的原因。

我的第一个建议是在不将函数存储在C中的情况下让它工作。只需在Lua中将函数分配给一个全局函数,然后在C中使用Lua状态(L)获取全局函数,按下args,调用函数,并使用结果。一旦这项工作开始,您已经掌握了基本知识,并且知道您的函数正在工作,您可以更改使用该函数的方式以使用注册表。祝你好运

正如@scholli提到的,我是在做了一个lua_close(L)之后打这个电话的

为了回答这个问题,我们需要了解您试图调用的“用户定义的Lua函数”是从何处获得的,以及如何将其存储在注册表中。问题可能与此重复,因为我调用Lua_rawgeti的点是在调用Lua_close(L)后运行的.在调用Lua_close(L)之后,在任何情况下都不要在Lua_状态L上使用Lua C api;)@jimt我建议自己回答或删除,这样问题就不会一直打开。如果你阅读评论,你会看到jimt在使用状态之前调用了
lua\u close