Lua API unload luaL_loadfile

我正在游戏中开发Lua脚本,用户能够编写自定义的Lua脚本并加载它。

我已经完成了实现和函数

L = luaL_newstate()
luaL_openlibs()
lua_register(L, cFunction, "luaFunction")
lua_register(L, cFunction2, "luaFunction2")
lua_register(L, cFunctionN, "luaFunctionN")

现在我在尝试什么? 通过按钮按下执行/杀死脚本,如下图所示:https://i.stack.imgur.com/eJQzg.png

所有来自脚本编辑器的脚本都需要访问Lib.lua,所以我这样做:

luaL_loadfile(L, "Lib.lua")
lua_pcall(L, 0, 0, 0)

然后要加载脚本,我可以使用同样的东西,对于用户想要杀死/卸载脚本来说,这是可以看的。

luaL_loadfile(L, "script.lua")
lua_pcall(L, 0, 0, 0)

我探索了许多关于Lua API的线程,目前没有好的答案解决这个问题。

人们谈论lua_newthread,我已经尝试实现但没有成功。

T = lua_newthread(L)
luaL_loadfile(L, "script.lua")
lua_pcall(L, 0, 0, 0)
返回>> Attempt to call a nill value。看起来新线程无法访问Lib.lua

还有另一个问题,当我注册函数时使用:

lua_register(L, cFunction, "luaFunction")

即使我能够创建一个线程function来自luaL_newstate*L需要传递handle L以保持工作,而线程的handle是T。

将C函数传递给Lua的示例:

 static int add (lua_State *L) {
      double a = lua_tonumber(L, -1);  /* get argument 1 */
      double b = lua_tonumber(L, -2);  /* get argument 2 */
      lua_pushnumber(L, a+b);  /* push result */
      return 1;  /* number of results */
    }

任何意见都会得到赞赏。

问候, Ascer

点赞