将C结构体指针传递给Lua脚本

6
我想知道是否有一种方法可以将结构体指针传递给Lua脚本, 并在Lua中直接访问其成员,而无需复制(用于读写目的)。
例如,是否可以通过其指针直接覆盖C结构体的成员?
(我正在使用luajit)
3个回答

6
除了Tim的答案之外,您还可以选择轻量级用户数据。您不会在Lua堆栈中拥有数据副本,您推送到Lua的是一个指针。
Lua不知道这个指针中有什么,它是否仍然指向有效的内存,或者如何访问这个指针中的任何对象,因此您需要在C中自己处理所有这些内容。我通常会发送指向列表上的项目的指针,因此如果存在任何删除了列表中的条目的风险,则首先会迭代列表以验证指针(如果您的列表很短,则不是什么大问题)。要在Lua中访问指针中的项,您需要编写在Lua中调用的get / set函数。
要开始,请参阅有关推送和检索lightuserdata的条目:

5

由于您已经标记为 luajit,您可以将轻量级 userdata(如其他人所提到的)与 FFI 相结合,以进行直接的结构成员访问,请参见此处的教程:http://luajit.org/ext_ffi_tutorial.html


哇,太棒了。我不知道这个。如果你在使用luajit,这绝对是正确的选择。 - Tim Seguine

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接