问题标签 [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 回答
136 浏览

c++ - 在 Lua 脚本中使用 C++ 对象

如何在 lua 脚本中使用 C++ 对象?

示例类:

在 lua 中使用的示例(是我需要的):

谢谢!

0 投票
1 回答
379 浏览

c++ - 创建属性和方法 Lua C++

这很难解释,我在文档或网络上的任何地方都找不到任何内容,所以我认为这将是解决这个问题的合适地方。

我正在尝试使用 C++ 在 Lua 中的对象上注册属性和方法。

这就是我想要在 Lua 中实现的目标:

我可以使用 C++ 轻松实现示例中的第一行

但是我如何创建方法和:jump()属性?.setX.getXcreatePlayer

0 投票
1 回答
9831 浏览

c++ - 测试 Lua 数是整数还是浮点数

在我的 C++ 程序中,我需要知道 Lua 变量是整数还是浮点数。C API 提供lua_isnumber()但此功能不区分int/float/double.

到目前为止,我已经使用以下方法解决了这个问题modf()

Lua API 是否提供了一种更精确地推断变量类型的方法?

0 投票
2 回答
5030 浏览

c++ - 从 lua_pcall(L, 0, 0, 0) 获取所有错误

是否可以从 C/C++ 获取 lua 堆栈中的所有错误?这是我尝试过的

C++

路亚:

输出:

即使堆栈大小为 0 或负数,我也尝试过循环,但我不明白堆栈如何为负数,并且在几次尝试后程序崩溃。

0 投票
2 回答
2365 浏览

c - 使用 Lua C Api 从索引中获取数组值

我有这个数组:

如何从该数组检索索引到 C 程序?

例如:

0 投票
2 回答
818 浏览

lua - 在 lua 中创建新的 C 库

我想知道如何在 lua 5.2.3 中创建和使用新的 C 库。由于我在嵌入式系统上,我不能使用动态库(需要,共享库,...)。我找到了答案,但它适用于 lua 5.0 ( http://www.lua.org/pil/26.2.html ),因此不兼容。如果有人有想法?

0 投票
1 回答
132 浏览

lua - 在 Lua 上检索模块对象

我有一个使用 Lua 运行一些脚本的 C 程序。我需要通过 C 代码打开 Lua 库,例如luaopen_socket_core(myLuaState),由于某些原因,我无法从 Lua 代码中加载模块,例如socket = require "luasocket".

一旦理解了这个程序的想法,现在我需要加载一个名为struct的库,所以我将 struct 添加struct.c到我的项目中,当我尝试使用它的函数时,运行时struct.unpack会抱怨没有调用全局变量struct. 当然,它是装满的,luaopen_struct(myLuaState)而不是struct = require "struct"对我来说是禁止的。

关于让这个struct变量可用的方法有什么建议吗?

0 投票
1 回答
320 浏览

c - 从 c api 内部创建 lua 表时出错

我在 C 中有一个 A* 算法,打算从 Lua 中使用。现在,A* 本身工作正常,但出于某种奇怪的原因,当我从 Lua 调用它时,当任何一个参数函数(邻居)创建表时,都会弹出一个奇怪的错误。在 C 中创建表工作正常。该库有 2 个版本 - 第一个版本在“main”函数中直接从 C 调用脚本,并且从 Lua 创建表工作顺利。第二个被编译为 dll 并由制作表格时崩溃的脚本加载。为什么,我不知道。我已经尝试在 C 中分配我的所有内存并传递 lightuserdata,但它没有任何区别。我在同一台机器上编译了其他 .dll,它们不会复制此错误。

C 库

LUA 脚本

0 投票
0 回答
162 浏览

lua - luaL_ref 在表上出错?

现在,我有两个模块,CModule 和 CModule2。在CModule中,我的代码如下:

我将在 CModule2 中获取注册表。在 CModule2 中,我的代码如下:

但现在。当我调用 lua_objlen 时,我什么也没得到。有什么错误吗?如果我注册一个函数或一个字符串值,它工作得很好。

我这样称呼 Lua 中的 CModule。

为什么?

0 投票
1 回答
418 浏览

c - 将upvalue传递给C中的Lua 5.2模块

我正在尝试为自己创建一个实验环境,在该环境中,我的应用程序作为 telnet 服务器运行,用于理论上无限的 telnet 客户端,这些客户端可以在自己的 Lua 环境中执行 Lua 命令。为此,每个客户端都有自己的线程,因为我希望他们拥有自己的 Windows 消息循环,以满足自己的特定需求。

我创建了几个可在 Lua 中访问的模块来做一些有趣的事情。我还希望能够从 Lua 创建一个窗口,所以我想添加一个名为“window”的模块并添加一个“new”方法。问题是,我需要知道我在哪个线程中(嗯,更具体地说,我需要我用来定义线程正在处理的客户端的类)并且我不知道如何在C Lua 函数用于window.new.

使用普通函数,您可以添加 upvalues(我已经有一个简单的window函数,它能够创建一个由它正在运行的线程管理的窗口),但是在创建模块时,当您尝试这样做时,这并不是那么简单标准方式。

我的窗口模块具有以下典型的 luaopen 功能:

我的线程创建一个 Lua 状态并打开必要的库,包括窗口之一:

我知道该函数luaL_setfuncs支持upvalues,但已经为时已晚。我没有办法传递值以输入向上值。

我试图在调用之前推送它们并将它们luaL_requiref弹出到luaopen_window函数中,在调用之前再次推送它们luaL_setfuncs但它不起作用:由于luaL_setfuncs内部工作方式,推送的值已经消失。我当然可以编写自己的luaL_setfuncs支持upvalues(嗯,我想我可以),但必须已经存在更好的方法?

编辑:顺便说一句。我想防止使用全局 Lua 变量来存储指向我的类的指针。这可能会带来安全风险,尽管这个工具可能永远不会在我的计算机之外使用,但我只想正确编码。