问题标签 [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.

0 投票
0 回答
193 浏览

c++ - 尝试在单独的 lua 状态下运行脚本时出现 Lua 问题

我是嵌入 Lua 的新手,并且已经成功地在我的旅程中取得了进展。我将结果存储luaL_loadfile到全局中,以便可以重复调用它。我当前的问题是,当我尝试在当前脚本状态以外的状态下运行脚本内部的脚本时,我得到了段错误。

以下是脚本的加载方式:

我的执行功能:

我的绑定调用 ScriptEngine::RunScript(Script&)

还有我的测试脚本:

0 投票
1 回答
1073 浏览

c - 从 C 中读取 Lua 表

我正在尝试将 Lua 表传递给我的 C 程序,但我不知道该怎么做。

我的 Lua 代码:

我的 C 代码:

我必须做什么才能在所有元素上运行?此代码生成如下错误:

'buildpollingtable' 的错误参数 #-3(lstage-Stage * 预期,得到表)

谁能解释我做错了什么?

0 投票
2 回答
4867 浏览

c - 在 C 中获取 Lua 表大小

如何在 C 中获得 Lua 表的大小?

我的 Lua 代码:

它总是打印 0。我究竟做错了什么?

0 投票
2 回答
202 浏览

c - C:从调用中替换表

我可以换一张桌子吗?例如,我无法正常工作:

0 投票
1 回答
629 浏览

lua - Lua:从c函数调用中读取表参数

我真的不确定在 Lua 的 C API 中处理表。我目前正在开发的界面要求我读取给我的 c 函数的表的内容:

例子.lua:

我注册为“setSomePosition”的 C 函数:

我知道有几种方法可以处理您有时需要知道我所做的索引的表。我现在对此感到困惑,我研究得越多,我就越困惑。可能是因为我真的不知道如何用适当的术语来描述我所追求的。

非常感谢一些很好的注释示例代码,说明您将如何填补我的 c 函数中的空白:)

(如果您对此主题有易于理解的指南,请不要介意评论)

0 投票
1 回答
6052 浏览

c - Lua 用户数据数组访问和方法

我正在用 C 语言编写用于 Lua 的用户数据类型。它还有一些数组类型的属性和各种方法。现在,如果你属于这种类型,我会使用u:set(k,v)resp。u:get(k)访问数据,例如u:sort()作为方法。为此,我设置__index了一个包含这些方法的表。现在,如果我想使用u[k] = vor访问数据u[k],我需要设置__newindex和resp 。但随后其他方法不再可用......__indexsetget

在 C 中处理这个问题的最佳方法是什么?我猜我需要用 C 编写一个函数来注册__index并在那里处理它。也许检查 key 是否属于 Lua 方法表,如果是则调用它。

任何帮助/提示将不胜感激。我没有找到这样的例子,尽管(对我来说)这似乎是一件很自然的事情。

编辑: 在 Lua 中添加了我的 C 版本解决方案,发布在下面的答案中。这或多或少是直接翻译,所以所有功劳都归于@gilles-gregoire。

以下 C 函数注册为 __index 元方法。

这是执行此操作的代码,

permL_methods在哪里

并且permL_functions

0 投票
3 回答
289 浏览

c - 嵌套的 lua_CFunction 调用

处理嵌套的 lua_CFunction 调用的最佳方法是什么?假设我有两个这样的功能:

上面的函数调用不起作用。一种选择是修改function2()以使用堆栈上的最后一个元素(索引 -1),但这通常不是一个解决方案,因为function2()可能会从具有不同调用堆栈的不同位置调用。另一种方法是替换return function2(L);by

我假设这提供function2()了自己的调用堆栈,因此无需修改它。但是对于具有更多参数的函数,这种解决方案似乎过于复杂,因为它需要在堆栈上复制所有这些函数。

tl; dr:lua_CFunction从另一个内部调用 a 的推荐方式/好方法是什么?

0 投票
1 回答
1363 浏览

c - lua c读取嵌套表

下面是我需要从 C 读取的 lua 表:

下面是c代码:

我想遍历这个可能在while循环中包含一些数据的表,但真的不知道该怎么做,所以有什么提示吗?

非常感谢您的提示!以下是工作代码:

0 投票
2 回答
101 浏览

lua - 包含子包的 Lua 包

我在 C 中为 Lua 编写了许多模块。每个模块都包含一个 Lua 用户数据类型,我像这样加载和使用它们:

现在我想将两种用户数据类型放在一个AandB可以像这样使用的共享库中

什么是实现这一目标的好方法?现在我的luaopen_*功能看起来像这样

并且是否有可能仍然只加载部分,例如:A = require("AandB.A")

0 投票
2 回答
1282 浏览

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 的“步骤指针”......我根本不知道为什么。

请帮忙......我搞砸了这么多是什么?

谢谢你,很抱歉这篇长文......我只是不知道如何让它更短。