Lua API卸载luaL_loadfile

时间:2018-11-23 08:06:17

标签: api lua

我在游戏中使用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的许多线程中进行了研究,目前对于该问题没有很好的答案。

Ppls在谈论我已经尝试实现的lua_newthread,但没有成功。

T = lua_newthread(L)
luaL_loadfile(L, "script.lua")
lua_pcall(L, 0, 0, 0)
Return >> Attempt to call a nill value. Look like new thread has no access to Lib.lua

当我注册功能时,还有其他问题:

lua_register(L, cFunction, "luaFunction")

然后我甚至可以通过luaL_newstate * L创建线程函数,该函数需要在线程句柄为T时将句柄L传递给工作。

传递给lua的C函数的示例:

 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

0 个答案:

没有答案