将 C 结构体指针传递给 Lua 脚本
2011-9-4 10:43:2
收藏:0
阅读:182
评论:3
我想知道是否有一种方式可以将一个结构体指针传递到 Lua 脚本中,并从 Lua 中访问它的成员而不进行复制(用于读写目的)。
因此,例如,是否可以直接通过其指针重写 C 结构体的成员?
(我正在使用 luajit)
原文链接 https://stackoverflow.com/questions/7298642
点赞
stackoverflow用户596285
除了 Tim 的回答之外,你也可以使用 light userdata。你在 Lua 栈中推送的是一个指针,而不是数据的副本。
Lua 无法理解这个指针指向什么,它是否仍然指向有效内存,或者如何访问这个指针中的任何对象,所以你需要在 C 中自行处理所有这些。我通常发送一个指向列表中的条目的指针,因此如果有任何风险导致该条目从列表中删除,我首先遍历该列表以验证指针(如果您的列表很短,这不是什么大问题)。要在 Lua 中访问指针中的项,您需要编写从 Lua 可以调用的 C 中的 get/set 函数。
以下是有关推送和检索 lightuserdata 的条目:
- lua_pushlightuserdata - 在栈上推送一个条目
- lua_touserdata - 检索指针值
- lua_islightuserdata - 验证条目是否为light userdata
- Programming in Lua entry on light userdata
2011-09-04 12:24:52
stackoverflow用户255049
既然您已经将其标记为 luajit,那么您可以将轻量用户数据 (正如其他人所提到的) 与 FFI 结合使用,以直接访问结构体成员,参见此处的教程:http://luajit.org/ext_ffi_tutorial.html。
2011-09-04 13:49:14
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
使用 lua 用户数据可以实现这一点。以下是一些例子:链接,另一个链接。