问题标签 [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 投票
3 回答
16648 浏览

c++ - 如何使用 C API 创建嵌套 Lua 表

我想创建一个像

使用 C API?

我目前的做法是

在循环中创建内部表。在这个循环之前,我使用

为 2 个数字槽创建外部表。

但是如何将内部表保存到外部表?

0 投票
1 回答
4993 浏览

c++ - 从 C API 调用的 Lua 脚本的执行时间限制

有没有办法为这两个 C++ 语句设置执行时间限制(比如 10-20 秒),加载然后执行一个 lua 文件?

由于 Lua 文件不受信任,我不希望恶意用户在 Lua 代码中无限循环地挂起程序。

标记 C 因为 Lua API 是 C,标记 C++ 因为我正在使用 C++

0 投票
3 回答
2836 浏览

c++ - 使用句柄从.lua 调用lua 函数?

我正在做一个小项目,试图将 lua 与 c++ 集成。然而,我的问题如下:

我有多个 lua 脚本,我们称它们为 s1.lua s2.lua 和 s3.lua。它们中的每一个都有以下函数:setVars() 和 executeResults()。

现在我可以通过 LuaL_dofile 调用一个 lua 文件,并在使用 setVars() 和/或 executeResults() 之后立即调用。然而这里的问题是,在我加载 s2.lua 之后,我不能再调用 s1.lua 的函数。这意味着我必须重做 s1.lua 上的 LuaL_dofile 才能重新获得对该函数的访问权限,这样做我将无法访问 s2.lua 中的函数。

有没有办法简单地连续加载所有lua文件,然后开始随意调用它们的函数?像 s1->executeResults() s5->executeResults() s3->setVars() 等。

我目前已经有一个系统使用 boost::filesystem 来检测文件夹中的所有 lua 文件,然后我将这些文件名保存在一个向量中,然后简单地遍历该向量以连续加载每个 lua 文件。

放弃用 lua 文件名填充向量,我的插件加载函数现在看起来像这样:

为了更清楚一点,我在 .lua 中的所有内容都是这样的:

等等,但我希望能够在简单地连续加载两者之后调用 s1.lua 的 setVars() 和 s2.lua 的 setVars()。

0 投票
3 回答
4535 浏览

c++ - How to execute an untrusted Lua file in its own environment from the C API

I want to execute an untrusted .lua file in its own environment by calling lua_setfenv() so that it cannot affect any of my code.

The documentation for that function though only explains how to call a function, not how to execute a file.

Currently to run the file I use:

Do I have to call the "dofile" lua function from the C API with lua_setfenv, or is there a more elegant way to do it?

0 投票
2 回答
3829 浏览

c - 在 Lua C API 中克隆 Lua 表

有很多关于如何在 Lua 中克隆 Lua 表的示例,但是我找不到任何如何使用本机 Lua C API 进行克隆的示例。我尝试过两次手动操作,但结果是一团糟(虽然有效)。

有没有人有关于如何优雅地在 C API 中对 Lua 表进行浅拷贝的任何提示或链接?

0 投票
1 回答
1027 浏览

lua - Lua C API:删除使用 luaL_newmetatable 创建的元表?

如何删除使用foo创建的元表luaL_newmetatable( L, "foo" );,以便luaL_getmetatable( L, "foo" );再次推送 NIL 值?

0 投票
2 回答
3854 浏览

c++ - Lua C API:处理和存储附加参数

CreateEntity 是我在项目中绑定到 Lua 的 C 函数。它将实体类名称字符串作为第一个参数,以及应传递给所选实体的构造函数的任意数量的附加参数。

例如,如果 CreateEntity 是一个普通的 Lua 函数,我可以这样做:

但是我怎么能用 C Lua 函数做到这一点呢?

0 投票
2 回答
278 浏览

lua - Lua 创建多个闭包实例

我在一个文件中有一些 lua 代码。我想创建此代码的多个闭包实例,每个实例都有不同的 _ENV 上值。我可以使用luaL_loadfile加载文件并设置第一个上值,使用不同的表 N 次,以创建 N 个实例。但这不会加载并编译文件 N 次吗?

我想要做的lua等价物如下,除了没有加载文件

有一个更好的方法吗?

0 投票
2 回答
283 浏览

lua - 使用独立 Lua 的 Luad

编辑:这已被追踪到共享库、d 运行时和 os x 的一个更普遍的问题。请参阅此处:在 OS X 上初始化 D 运行时

我正在尝试从 Lua 独立解释器访问一个简单的 d 函数。

我看不到让 lua 实例识别广告库的直接明显方法,所以我尝试了这个 hack

我知道当我调用 require("luad_test") 时,它会调用 luaopen_luad_test(lua_State* L) 让我可以访问解释器的 lua_State。但是,当我调用 require 时,我只会遇到段错误。

我看这个完全错误的方式吗?

编辑:我在 os x 上使用 lua 5.1.5,我在 package.cpath 中添加了 ";?.dylib" 以允许加载 .dylib 而不是 .so

编辑2:我缩小了一点。在 luaopen_luad_test 中任何使用 new 都会导致段错误。

0 投票
1 回答
800 浏览

c++ - 编译 Love 2D Xcode:架构的未定义符号

当我在 xcode 中编译 c++ 时,如何让编译器识别这些“符号”。这是错误(我有一种感觉,它忽略了框架,然后为缺少的框架提供了错误)

(它一直在继续;错误是相似的,所以我只是抽样)