【问题标题】:Passing C struct pointer to lua script将 C 结构指针传递给 lua 脚本
【发布时间】:2011-11-10 01:11:22
【问题描述】:

我想知道有没有办法将结构指针传递给 lua 脚本, 并在没有副本的情况下从 lua 访问它的成员(用于读取和写入目的)。

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

(我用的是luajit)

【问题讨论】:

    标签: c lua luajit


    【解决方案1】:

    除了蒂姆的回答,你也可以去 light 用户数据。您最终不会在 Lua 堆栈中获得数据副本,您推送到 Lua 的只是一个指针。

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

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

    【讨论】:

      【解决方案2】:

      看到您已将其标记为 luajit,您可以将轻量级用户数据(如其他人提到的)与 FFI 结合以直接访问结构成员,请参阅此处的教程:http://luajit.org/ext_ffi_tutorial.html

      【讨论】:

      • 哦,哇。我不知道这件事。如果您使用的是 luajit,这绝对是您要走的路。
      【解决方案3】:

      执行此操作的方法是使用 lua 用户数据。以下是几个示例:linkanother link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 2017-10-02
        • 2012-04-21
        • 1970-01-01
        • 1970-01-01
        • 2020-05-15
        • 1970-01-01
        相关资源
        最近更新 更多