问题标签 [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 脚本中使用 C++ 对象
如何在 lua 脚本中使用 C++ 对象?
示例类:
在 lua 中使用的示例(是我需要的):
谢谢!
c++ - 创建属性和方法 Lua C++
这很难解释,我在文档或网络上的任何地方都找不到任何内容,所以我认为这将是解决这个问题的合适地方。
我正在尝试使用 C++ 在 Lua 中的对象上注册属性和方法。
这就是我想要在 Lua 中实现的目标:
我可以使用 C++ 轻松实现示例中的第一行
但是我如何创建方法和:jump()
属性?.setX
.getX
createPlayer
c++ - 测试 Lua 数是整数还是浮点数
在我的 C++ 程序中,我需要知道 Lua 变量是整数还是浮点数。C API 提供lua_isnumber()
但此功能不区分int/float/double
.
到目前为止,我已经使用以下方法解决了这个问题modf()
:
Lua API 是否提供了一种更精确地推断变量类型的方法?
c++ - 从 lua_pcall(L, 0, 0, 0) 获取所有错误
是否可以从 C/C++ 获取 lua 堆栈中的所有错误?这是我尝试过的
C++
路亚:
输出:
即使堆栈大小为 0 或负数,我也尝试过循环,但我不明白堆栈如何为负数,并且在几次尝试后程序崩溃。
c - 使用 Lua C Api 从索引中获取数组值
我有这个数组:
如何从该数组检索索引到 C 程序?
例如:
lua - 在 lua 中创建新的 C 库
我想知道如何在 lua 5.2.3 中创建和使用新的 C 库。由于我在嵌入式系统上,我不能使用动态库(需要,共享库,...)。我找到了答案,但它适用于 lua 5.0 ( http://www.lua.org/pil/26.2.html ),因此不兼容。如果有人有想法?
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
变量可用的方法有什么建议吗?
c - 从 c api 内部创建 lua 表时出错
我在 C 中有一个 A* 算法,打算从 Lua 中使用。现在,A* 本身工作正常,但出于某种奇怪的原因,当我从 Lua 调用它时,当任何一个参数函数(邻居)创建表时,都会弹出一个奇怪的错误。在 C 中创建表工作正常。该库有 2 个版本 - 第一个版本在“main”函数中直接从 C 调用脚本,并且从 Lua 创建表工作顺利。第二个被编译为 dll 并由制作表格时崩溃的脚本加载。为什么,我不知道。我已经尝试在 C 中分配我的所有内存并传递 lightuserdata,但它没有任何区别。我在同一台机器上编译了其他 .dll,它们不会复制此错误。
C 库
LUA 脚本
lua - luaL_ref 在表上出错?
现在,我有两个模块,CModule 和 CModule2。在CModule中,我的代码如下:
我将在 CModule2 中获取注册表。在 CModule2 中,我的代码如下:
但现在。当我调用 lua_objlen 时,我什么也没得到。有什么错误吗?如果我注册一个函数或一个字符串值,它工作得很好。
我这样称呼 Lua 中的 CModule。
为什么?
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 变量来存储指向我的类的指针。这可能会带来安全风险,尽管这个工具可能永远不会在我的计算机之外使用,但我只想正确编码。