如何在另一个lua cfunction中调用lua cfunction?
2015-5-5 8:36:40
收藏:0
阅读:87
评论:1
我正在为我们的应用程序编写一个 Lua (5.1)扩展,使我们的客户可以在没有我们支持的情况下进一步扩展它。
总的来说,这非常有效,并且在几个包装器的帮助下甚至非常舒适,但现在我遇到了以下情况:
我有两个用户数据对象,一个计时器对象和一个窗口对象。用户可以通过定义它们的成员 OnTimer 和 OnSizeChanged 来“附加”事件。
这仍然非常有效:
mainLoop(C ++)-> 检查所有计时器(C ++)-> 脚本对象附加?(C ++),然后:
(在这里插入 C++ 代码)
所以在以下情况下一切仍然完美无缺(在调用之前和之后堆栈绝对为0):
(在这里插入Lua代码)
但是,如果 Lua 脚本如下所示:
(在这里插入 Lua 代码)
那么在 C++ 中的调用堆栈将是:
(在这里插入 C++ 代码)
当然,在应调用 OnSizeChanged 的位置,栈仍然包含前一个 luaChangeSize 回调的内容,并且不为空。
我曾尝试通过在调用 Window::SetSize 之前弹出 luaChangeSize 的所有参数并在之后恢复它们来简单地清空堆栈,但这并不起作用。结果是有点随机的,这取决于堆栈中的调用函数的组合,从“无法调用数字”到随机再次调用堆栈上的前一个函数。(gettop 在所有调用之前和之后肯定为0)。
因此,我应该如何“备份”当前堆栈并像 Lua 自己在 C++ -> Lua -> C++ 组合中那样恢复它?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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中获取用户配置主目录的跨平台方法
原文
The concept of backing up and restoring the stack seems wrong. Can't you just leave the stack how it is and let the new call work on top of the existing stack. Make sure everything accesses items on the stack using a relative to top index rather than absolute.翻译 回档和还原堆栈的概念似乎是错误的。您不能只是保留堆栈,让新的调用在现有堆栈顶部工作吗?请确保所有访问堆栈元素使用相对于堆栈顶部的索引而不是绝对索引。