【发布时间】:2013-11-22 23:48:53
【问题描述】:
在我的 Lua 应用程序中,我定义了一些在 lua_register("lua_fct_name","my_fct_name") 注册的自己的函数,以便 Lua 脚本知道它们。
现在我有一些需要在my_fct_name() 中访问的自定义/用户数据。它只是一个指向我自己管理的内存区域的指针,所以我使用lua_pushlightuserdata (L,data) 将它添加到 Lua-context。
现在看来我没有正确的位置来添加这些数据。在创建 L 后立即完成时,我无法访问 my_fct_name() 中的数据,这里 lua_touserdata(L,1) 确实返回 NULL,因此它在堆栈上不可用。如果在 lua_pcall() 执行脚本之前完成,我会收到一条关于意外数据的错误消息。
那么我必须在哪里/何时设置我的用户数据,以便它们在my_fct_name() 中可用?
【问题讨论】:
-
我想到的几件事:1. 您是否将轻量级用户数据变量作为参数传递给
my_fct_name()(对不起,如果这是一个愚蠢的问题) ? 2. 您是否正在为脚本设置不同的环境(例如沙盒)? 3。你能显示一些代码吗? -
不,my_fct_name() 仅从不存在这些(全局)用户数据的 LUA 中调用。用户数据在初始化时可用,它似乎在脚本启动之前必须将它们推送到 LUA 上下文 L。
-
请发布您的代码。
lua_touserdata(L, 1)将函数的第一个参数转换为用户数据。它不适用于任何全局。假设你的全局 luserdata 名称是ud,如果你想让它工作,你需要调用你的函数my_fct_name(ud)。或者在 C 端获取你的全局变量。 -
可能是我的方法完全错误,所以让我们更通用地问这个问题。我有一个指向初始化期间可用的一些用户数据的指针,这意味着在 LUA 脚本启动之前。现在,当从正在运行的 LUA 脚本中调用 C 函数时,我需要访问这些用户数据。由于 C 函数始终定义为 int my_lua_called_c_fct(lua_State *L) ,因此只有 L 可以从中获取这些用户数据。但是如何在初始化期间将数据放入 L 以及如何在该函数中检索它们?
-
阅读我的编辑以了解 Lua C API。
标签: lua lua-userdata