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

我想知道是否有一种方式可以将一个结构体指针传递到 Lua 脚本中,并从 Lua 中访问它的成员而不进行复制(用于读写目的)。

因此,例如,是否可以直接通过其指针重写 C 结构体的成员?

(我正在使用 luajit)

原文链接 https://stackoverflow.com/questions/7298642

点赞
stackoverflow用户880984
stackoverflow用户880984

使用 lua 用户数据可以实现这一点。以下是一些例子:链接另一个链接

2011-09-04 10:47:26
stackoverflow用户596285
stackoverflow用户596285

除了 Tim 的回答之外,你也可以使用 light userdata。你在 Lua 栈中推送的是一个指针,而不是数据的副本。

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

以下是有关推送和检索 lightuserdata 的条目:

2011-09-04 12:24:52
stackoverflow用户255049
stackoverflow用户255049

既然您已经将其标记为 luajit,那么您可以将轻量用户数据 (正如其他人所提到的) 与 FFI 结合使用,以直接访问结构体成员,参见此处的教程:http://luajit.org/ext_ffi_tutorial.html

2011-09-04 13:49:14