问题标签 [lua-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 尝试在单独的 lua 状态下运行脚本时出现 Lua 问题
我是嵌入 Lua 的新手,并且已经成功地在我的旅程中取得了进展。我将结果存储luaL_loadfile
到全局中,以便可以重复调用它。我当前的问题是,当我尝试在当前脚本状态以外的状态下运行脚本内部的脚本时,我得到了段错误。
以下是脚本的加载方式:
我的执行功能:
我的绑定调用 ScriptEngine::RunScript(Script&)
还有我的测试脚本:
c - 从 C 中读取 Lua 表
我正在尝试将 Lua 表传递给我的 C 程序,但我不知道该怎么做。
我的 Lua 代码:
我的 C 代码:
我必须做什么才能在所有元素上运行?此代码生成如下错误:
'buildpollingtable' 的错误参数 #-3(lstage-Stage * 预期,得到表)
谁能解释我做错了什么?
c - 在 C 中获取 Lua 表大小
如何在 C 中获得 Lua 表的大小?
我的 Lua 代码:
它总是打印 0。我究竟做错了什么?
c - C:从调用中替换表
我可以换一张桌子吗?例如,我无法正常工作:
lua - Lua:从c函数调用中读取表参数
我真的不确定在 Lua 的 C API 中处理表。我目前正在开发的界面要求我读取给我的 c 函数的表的内容:
例子.lua:
我注册为“setSomePosition”的 C 函数:
我知道有几种方法可以处理您有时需要知道我所做的索引的表。我现在对此感到困惑,我研究得越多,我就越困惑。可能是因为我真的不知道如何用适当的术语来描述我所追求的。
非常感谢一些很好的注释示例代码,说明您将如何填补我的 c 函数中的空白:)
(如果您对此主题有易于理解的指南,请不要介意评论)
c - Lua 用户数据数组访问和方法
我正在用 C 语言编写用于 Lua 的用户数据类型。它还有一些数组类型的属性和各种方法。现在,如果你属于这种类型,我会使用u:set(k,v)
resp。u:get(k)
访问数据,例如u:sort()
作为方法。为此,我设置__index
了一个包含这些方法的表。现在,如果我想使用u[k] = v
or访问数据u[k]
,我需要设置__newindex
和resp 。但随后其他方法不再可用......__index
set
get
在 C 中处理这个问题的最佳方法是什么?我猜我需要用 C 编写一个函数来注册__index
并在那里处理它。也许检查 key 是否属于 Lua 方法表,如果是则调用它。
任何帮助/提示将不胜感激。我没有找到这样的例子,尽管(对我来说)这似乎是一件很自然的事情。
编辑: 在 Lua 中添加了我的 C 版本解决方案,发布在下面的答案中。这或多或少是直接翻译,所以所有功劳都归于@gilles-gregoire。
以下 C 函数注册为 __index 元方法。
这是执行此操作的代码,
permL_methods
在哪里
并且permL_functions
是
c - 嵌套的 lua_CFunction 调用
处理嵌套的 lua_CFunction 调用的最佳方法是什么?假设我有两个这样的功能:
上面的函数调用不起作用。一种选择是修改function2()
以使用堆栈上的最后一个元素(索引 -1),但这通常不是一个解决方案,因为function2()
可能会从具有不同调用堆栈的不同位置调用。另一种方法是替换return function2(L);
by
我假设这提供function2()
了自己的调用堆栈,因此无需修改它。但是对于具有更多参数的函数,这种解决方案似乎过于复杂,因为它需要在堆栈上复制所有这些函数。
tl; dr:lua_CFunction
从另一个内部调用 a 的推荐方式/好方法是什么?
c - lua c读取嵌套表
下面是我需要从 C 读取的 lua 表:
下面是c代码:
我想遍历这个可能在while循环中包含一些数据的表,但真的不知道该怎么做,所以有什么提示吗?
非常感谢您的提示!以下是工作代码:
lua - 包含子包的 Lua 包
我在 C 中为 Lua 编写了许多模块。每个模块都包含一个 Lua 用户数据类型,我像这样加载和使用它们:
现在我想将两种用户数据类型放在一个AandB
可以像这样使用的共享库中
什么是实现这一目标的好方法?现在我的luaopen_*
功能看起来像这样
并且是否有可能仍然只加载部分,例如:A = require("AandB.A")
?
c++ - Lua 5.2 - 对象内的 C++ 对象(使用 lua_lightuserdata)
编辑:[答案 2 中的解决方案]
我是 LUA 的新手,在尝试做我想做的事情时遇到了麻烦。我有一个看起来像这样的 C++ 对象:
C++ 对象定义
我希望能够在 LUA 中以下列形式访问 TMeasurement 类型的对象:
LUA 所需用途
...ETC
另一件事,我不希望 LUA 为 TMeasurement 类型的对象的实例分配内存。这将在我的 C++ 代码中完成。我尝试了很多不同的方法,都没有成功。我现在将发布我的最后一次尝试。
在我的 C++ 代码中,我定义了以下内容:
TLimit - 获取将映射到 __index 的函数
TLimit - 设置将映射到 __newindex 的函数
现在,TMeasurement 类又多了一个函数。(我不会在这个例子中提供成员“meas”的设置函数)。
TMeasurement - 获取 __index 的函数
现在,代码中为这两个对象创建元表的部分:
C++ - 发布元表
(不要介意 nsLUA::safeFunction<...> 位,它只是一个模板函数,它将以“安全模式”在 < > 中执行该函数......当出现错误时它会弹出一个 MessaegBox遭遇)
最后,我在 C++ 中的主要函数,初始化 LUA,创建对象 TMeasurement 和实例,将其作为全局传递给 LUA 并执行 lua 脚本。大部分功能都包含在另一个名为 LEngine 的类中:
C++ - 主函数
现在,终于有问题了。当我执行任何 lua 脚本时,我可以访问 step 没问题,但我只能在第一次访问“min”或“max”内的 memebr ......任何后续访问都会出错。
LUA - 示例一
此脚本生成的输出为:
所以。在我第一次访问字段“min”(或“max”)之后,任何后续访问它的尝试都将返回“尝试访问索引...”错误。我是先访问 __index (local e = step.min.enabled) 函数还是 __newindex 函数 (step.min.enabled = true) 都没有关系。
似乎我第一次访问对象步骤的 min metatble 时弄乱了 LUA 堆栈。它以某种方式“替换”了从 LUA_MEASUREMENT 元表到 LUA_MEAS_LIMIT 的“步骤指针”......我根本不知道为什么。
请帮忙......我搞砸了这么多是什么?
谢谢你,很抱歉这篇长文......我只是不知道如何让它更短。