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

c - Lua C API - 将属性映射到函数

是否可以将函数作为 Lua 中的属性推送?

现在,我可以通过将它们作为字段推送来拥有 Get/Set 函数,如下所示:

并像这样在 Lua 中调用它们:

是否可以推送映射到没有元表的 C 函数的属性?我可以将__index和元表映射__newindex到自定义函数,但我想知道是否有更简单的方法。最终,我想要以下没有元表的语法:

这可能没有__indexand__newindex吗?

0 投票
1 回答
168 浏览

lua - 关于通过 Lua C API 的函数参数的详细信息

如果我foo(t[1])通过 C API 调用一个函数,我可以以任何方式查看哪个表和哪个索引作为参数,在这种情况下t1

手头的问题是move_card(card, table_slots[0])我将卡从游戏区域的一个插槽移动到另一个插槽的功能。table_slots也可以是handor player_slots。这可以使用元表来解决,说明正在访问的表的名称。但是索引是不可能解决的,或者是吗?table_slots[0]可以是一张card桌子,或者一个overlaystack(卡片数组),或者nil如果它是空的,就像player_slots. 但实际上我需要知道的是它是否来自 a table_slotsor player_slots

我可以破解一些代码分析吗?比如,获取函数调用所在的行,然后通过正则表达式 grep 索引?我也可以table_slots[0]作为字符串发送,例如move_card(card, "table_slot[0]"). 不那么优雅,但仍然有效。

0 投票
1 回答
2548 浏览

c++ - lua_open 使用 luaJIT 返回 null

使用最近的 luaJITlua_open返回null。常规 lua 库不会发生这种情况。

输出:0x0

我怎样才能让 luaJIT 工作?

SSCCE:

附加信息:使用makemake install. 使用编译器:

(使用 luajit 命令行应用程序luajit工作正常,测试脚本执行时没有错误。)

0 投票
2 回答
5546 浏览

c - 加载模块未定义符号时出错:luaL_setfuncs

我正在尝试创建一个要从 lua 脚本调用的 C 模块。我正在研究 debian linux。我正在使用 mysql-proxy 和 lua 5.2。我已经创建(从教程中复制)一些要调用的示例函数。

加载器定义如下:

要从 lua 调用它,我使用以下代码:

我用这个命令编译了它:

当我尝试运行脚本时,require命令出现以下错误:

我真的迷失了自己做错了什么。

0 投票
1 回答
110 浏览

c++11 - How do I handle errors in Lua when executing arbitrary strings?

I'm going for absolute minimalism here. (It's been a while since I've worked with the Lua C API.)

This program works fine as long as I feed it perfect Lua. However, if I enter something bad (such as asdf()), the program crashes! Why is it not handling my error gracefully?

I've tried breaking out the calls before. It crashes on the call to lua_pcall itself. I never make it past that line.

0 投票
2 回答
494 浏览

c++ - 为什么调用 luaL_error 时不调用 c++ 对象析构函数?

我有一段这样的代码

我知道当 lua 由 c 编译器编译时,它使用 longjmp 来引发错误。因此,我使用 c++ 编译器编译它,以便它使用 c++ 异常来处理错误,并且即使抛出错误也应该调用析构函数。但我的问题是对象的析构函数没有被调用。

但是,以下代码正在运行(调用了析构函数)

为什么会这样?我确定 LUAI_THROW 宏被解释为 throw 关键字。

0 投票
1 回答
281 浏览

c - 如何使用 dlsym 在 lua 库中调用函数

我正在尝试调用 lua 库运行时,所以我在 C 中创建了一个 lua 库

所以我将它构建为一个动态库,并尝试调用它:

但是当我调用使用它的 Lua 代码时,我遇到了分段错误。

我应该如何在我的程序中调用 lib lua,我知道可以将我的 lib 放在某个 lua 路径中,而 lua api 调用我的 lib,但我需要使用 dlopen 调用它。

谢谢,

0 投票
1 回答
4212 浏览

lua - 获取存储在 C 中的 Lua 函数的“指针”

在 Lua C API 中,我可以使用lua_tostring().

如何通过 Lua API 将 Lua 函数的“引用”(如果这是正确的术语)传递给 C?因此,它可以稍后从 C 中调用,使用lua_call(),而不必通过它的名称来引用它。

(确实需要这样,C程序将来会在某个地方调用该函数,而程序对该函数一无所知,因为要传递的函数是在Lua程序中定义的)

0 投票
1 回答
91 浏览

c - 使用 Lua C API 选择带有选择器字符串的嵌套值

假设我在嵌套表中定义了一个值:tab["m"]["b"] = {}. 在 Lua 中,我可以用前面的语句来定义它。

C API也可以吗?具体来说,不是单独推送tab,m等,而是使用单个字符串选择值tab["m"]["b"]

推送和选择它,就像使用单个值一样,(如下面的代码)不起作用。

0 投票
1 回答
868 浏览

c - 使用 C API 的弱表和 GC 终结器

我正在尝试通过使用 C API 将函数值存储在弱表中来为函数值创建 GC 终结器。

我首先在纯 Lua 5.2 中编写了一个原型:

结果输出:


原型似乎按预期工作。下面是C版本:

编译使用:

结果输出:

C 版本有一些细微差别:

  1. sentinels我存储在注册表中的不是本地表。
  2. 使用元方法使用零大小的用户数据而不是表作为标记值__gc

我很困惑为什么在 C 版本中myfunc终结器在运行完整的收集周期后不执行。我究竟做错了什么?