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

我想知道有没有办法将结构指针传递给lua脚本,并从lua到达它的成员而不需要复制(用于读写目的)。

那么,例如是否可以直接通过其指针覆盖ac结构的成员?

(我正在使用luajit)

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

除了蒂姆的答案,你还可以选择轻量级的用户数据 。 你不会在Lua堆栈中得到数据的副本,所有你推送到Lua的都是一个指针。

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

首先,以下是推送和检索lightuserdata的条目:

  • lua_pushlightuserdata – 在堆栈上推送一个条目
  • lua_touserdata – 检索指针值
  • lua_islightuserdata – validation条目是轻用户数据
  • 在轻用户数据上的Lua条目中编程

这样做的方法是使用lua userdata。 以下是几个示例: 链接 , 另一个链接 。