问题标签 [lua-c++-connection]

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 回答
113 浏览

lua - 使用 Lua C API 构建的嵌套表崩溃

我正在尝试在 Lua 中创建一个深度嵌套的表。当我嵌套超过 16 层时,我的程序崩溃了。

在下面的示例程序中,当我将 DEPTH 更改为 16 而不是 17 时,程序不会崩溃。我找不到任何说有最大表深度的资源,而且这么低似乎很奇怪。崩溃发生在对 lua_close() 的调用中。

我是否误解了如何使用 C API 在 Lua 中构建表,或者实际上是否存在最大深度?

0 投票
2 回答
2547 浏览

c++ - 带有轻量级用户数据和引用的 Lua 注册表有什么区别?

因此,使用 Lua C API,您可以将 Lua 值保存在注册表中并稍后检索它。有不同的方法可以做到这一点,您可以创建一个变量并将其指针用作注册表中的键,因为它始终是唯一的。您将指针作为轻用户数据推送。

您还可以使用LuaL_ref(L, LUA_REGISTRYINDEX). 一个比另一个有什么优势?什么时候使用引用,什么时候使用指针?

还有引用,因为它被称为引用,如果 Lua 垃圾收集器收集 Lua 值,注册表中的值会是nil? 如果 Lua 更新了 Lua 值,注册表中的值是否也会改变?

0 投票
1 回答
438 浏览

c++ - lua - 在 C 中存储闭包,在 C 中调用异步

我需要一个想法,如何存储 lua 闭包以便稍后异步调用它们。

  1. 我的第一个想法是lua_tocfunction闭包不是 cfunction,不能直接从 C 调用
  2. 第二个想法是将闭包保存在元表中,我可以推送它并稍后调用它,但似乎我无法复制闭包。( Error: attempt to index a function value)。

所以我需要你的帮助。我怎样才能储存闭包?

我承认,我不完全理解为什么__index我的 lua ctor 中有一个字段,因为我从某个地方复制了该部分。

顺便说一句:该程序没有onrender按预期工作。我正在使用 qt gui 并且在 qt 的主循环之后__gc关闭了 lua 状态,因此在脚本之后不会删除创建的窗口。

引导程序.lua

w_lua.cpp

0 投票
1 回答
2528 浏览

lua - How to debug Lua code using Visual Studio

I have a win32 application and this is linked with Lua files. Both Lua and C++ files have bi-directional communication and can invoke function within each other.

I wanted to debug Lua code from Visual Studio IDE likewise what we do for C++ code. I have installed "BabeLua For 2012 V3.2.2.0" extension, but not able to debug...

I simply created a break point in Lua file and attached the code to my Win32 application, but it says that "No symbols have been loaded".

Please help me to understand where does the symbol files resides for Lua, or is there any other intuitive way to debug Lua scripts..

Any help will be greatly appreciated...

0 投票
0 回答
128 浏览

lua - C Lua Api 适用于 lua5.1 但不适用于 qlua 解释器

我正在使用 Lua 进行深度学习任务,我的主要解释器是qlua。我需要从基于 C 的应用程序中获取图像流。为此,我需要将 Lua 与 C 接口以访问图像流。我浏览了几个 C Lua Api 教程,发现这个教程可以完美地与 Lua5.1 配合使用。 lua c 包装

问题是,当我使用 qlua 作为此代码的解释器时,它不起作用并给我以下错误:

LUA 代码

错误

使用 qlua 解释器的解决方案是什么?

0 投票
2 回答
3400 浏览

c++ - 如何使用 Lua 的 C API 在控制台中打印错误

我一直在寻找一种使用 Lua 的 C API 处理错误的方法,并在控制台中简单地打印出来。虽然,我找不到一个工作示例。我想做的只是:

或者

但到目前为止,还没有任何效果。使用 LUA C API 进行错误处理并在控制台中显示消息的正确方法是什么?

0 投票
1 回答
533 浏览

c++ - lua 加载我的 c++ 共享库,但不加载它的依赖共享库

我有一个 c++(旧版)应用程序,它调用一些 lua 脚本来实现某些功能。

现在我正在编写一个新的 c++ 库,应该从该 lua 脚本中调用它。

我没有提到任何用于链接的 lua5.1 so 文件。

但是这个 power.so 在运行时需要 lua-5.1.so。

现在,我有一个 C++ 遗留应用程序,其中编译了 lua52。

它会调用 alert.lua 来完成一些工作。

注意:加载power.so的lua运行在lua5.2上

Power.so 编译完成,依赖 lua5.1

我得到一个错误

这些版本必须相同吗?

有人可以阐明这个问题吗?

编辑:如果我用 lua52.so 编译 power.so,那么 lua 脚本和 C++ 应用程序异常中止。

如果如果在构建 power.so 时没有提及 -llua52,那么在运行时会出现一个错误,说未定义的符号。

编辑:更多解释:

有一个 C++ 应用程序 .exe。(samplecpp) 还有一个 .dll/.sh 与 lua 5.2 库一起构建,因此具有 lua 以及其他功能。(luaplugin.so)

这个 luaplugin.so 可以调用任何配置的 lua 脚本。它调用并执行 lua 脚本中的函数。

现在我有一个 lua 脚本,我想连接到不同的 c++ 模块。

我正在编写的 c++ 模块(构建到 .so 依赖于 lua52.so)依次使用 lua 函数进行注册等。因为它必须从 lua 脚本加载。

但是在运行时,当 samplecpp 执行 lua 脚本并且 luascript 需要 c++ .so 时,我在 c++ .so 中使用的 lua 函数上遇到未解决的错误。

我怎样才能让它引用 samplecpp 本身中可用的 lua 函数?

0 投票
1 回答
228 浏览

c++ - Lua c ++ lib sethook:使用钩子函数arg给出错误

谷歌搜索了一段时间,不知道发生了什么。所以我有一个名为 luaScript 的类,它处理 lua 脚本(令人惊讶!我知道。),在当前状态下,无法退出或暂停当前正在执行的脚本。

我发现了钩子,它允许我在每次发生事情时运行代码。还发现了 2009 年的一个很酷的 stackoverflow 问题,展示了如何使用它们。

复制代码,完成钩子,尝试编译,然后......什么都没有。只不过是一个错误,说我传递的函数 ( void hookRoutine(lua_State *L, lua_Debug *ar)) 与类型不兼容lua_Hook(我找到了总 bs,因为据我所知,它lua_Hook的定义typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); 正是我给它的。)

这是我复制的代码: lua_sethook(mL, hookRoutine, LUA_MASKCOUNT, 0); mL作为 lua 实例并hookRoutine作为钩子。

到目前为止我尝试过的事情:

我完全被这件事难住了,已经在谷歌上搜索了几个小时,有人可以解释一下我犯了什么愚蠢的错误吗?

0 投票
0 回答
305 浏览

lua - 如果 lua_pcall 返回错误,是否还有返回值留在堆栈中?

假设我正在从 C 中调用一个返回一个结果的 Lua 函数。如果它返回一个错误,结果还会在堆栈上吗?

例如,lua_pop以下代码中的第一个是否存在?

0 投票
1 回答
852 浏览

lua - lua_rotate 是做什么的?

Lua5.3引入了新的c api lua_rotate:https://www.lua.org/manual/5.3/manual.html#lua_rotate

在有效索引 idx 和堆栈顶部之间旋转堆栈元素。元素在顶部方向旋转 n 个位置,对于正 n,或在底部方向旋转 -n 个位置,对于负 n。n 的绝对值不能大于被旋转的切片的大小。

无法理解 lua_rotate 的工作原理,尤其是上面的粗体字,需要帮助!