将C结构指针传递给lua脚本

时间:2011-09-04 10:41:16

标签: c lua luajit

我想知道有没有办法将结构指针传递给lua脚本, 并且无需复制即可从lua访问其成员(用于读写目的)。

因此,例如,是否可以通过其指针直接覆盖c结构的成员?

(我正在使用luajit)

3 个答案:

答案 0 :(得分:6)

除了Tim的回答,您还可以使用 light userdata。你不会在Lua堆栈中得到你的数据副本,所有你推送Lua都是一个指针。

Lua不了解这个指针中的内容,它是否仍指向有效内存,或者如何访问此指针中的任何对象,因此您必须自己在C中处理所有这些内容。我是通常发送一个指向列表中项目的指针,所以如果从列表中删除了条目的任何风险,我首先遍历列表以验证指针(如果你的列表很短,那就没什么大不了的) 。要访问Lua中指针内的项目,您需要在C中编写可以从Lua调用的get / set函数。

要开始使用,以下是推送和检索lightuserdata的条目:

答案 1 :(得分:5)

看到你为luajit标记了这个,你可以将light userdata(如其他人所提到的)与FFI结合起来进行直接的struct member访问,请参阅这里的教程:http://luajit.org/ext_ffi_tutorial.html

答案 2 :(得分:1)

执行此操作的方法是使用lua userdata。以下是一些示例:linkanother link