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

c++ - luabind 如何隐式转换对象?

在不涉及我正在处理的大型多图书馆项目的太多无关细节的情况下,我想问一个关于其中发生的特定事件的问题。我正在使用 Luabind 让我的 C++ 代码与我的 Lua 代码接口,并且我有一个具有继承的类结构,如下所示:

GuiWidget

GuiButton : GuiWidget

我已经通过 Luabind 向 Lua 注册了这两个类。然后我执行以下操作,指向类widget实例的指针在哪里GuiWidget

现在,同样的代码片段可以处理从按钮到滚动条甚至整个窗口的任何内容。因此,稍后在 lua 代码中,当单击复选框按钮时,我将这行代码称为:

这行得通。即使推送的指针是一个GuiWidget指针,lua 代码也知道要使用GuiButton该特定实例的类独有的功能。它是如何做到的?它如何获取一个小部件指针并自动知道特定的小部件是一个按钮?我不相信这是可能的,所以我花了一段时间才找到那个解决方案,但我想我会在黑暗中拍摄,它以某种方式起作用。

0 投票
1 回答
1373 浏览

c++ - 使用 LuaBridge 从 C++ 调用 Lua 函数

我在使用 LuaBridge 从 C++ 调用 Lua 函数时遇到了一些麻烦。这个想法是我想在 C++ 中的每个游戏更新上调用脚本上的“更新”。以下代码是我在网上找到的:

所以在我的情况下,这将是:

但是, LuaBridge 2.0(命名空间)getGlobal中似乎不存在。luabridge这不同于lua_getglobal

我想知道这是否已被不同的函数调用替换,或者是否已在 2.0 版本中被弃用。我当然可以使用普通的 C Lua 方法,但我想知道这是否在 LuaBridge 中被抽象(为了让事情更容易)

0 投票
2 回答
2520 浏览

c++ - ./lua/addtest.lua:9: 尝试索引本地“testobj”(用户数据值)]]

test.exe调用addTest.lua并设置lua_testobj到表中,addTest.lua调用testobj.dll,但是testobj.dll不能得到“lua_testobj”

错误消息是

addTest.lua:9 尝试索引本地“testobj”(用户数据值)

  1. 测试程序

    /li>
  2. addtest.lua 代码如下

    /li>
  3. testobj.dll 源代码如下

    /li>
0 投票
2 回答
2369 浏览

c++ - lua 函数参数预计在附近

我尝试在 C++ 项目中使用 lua。对于 lua 执行,我这样写:

和 lua 脚本:

那没有用,我收到错误消息:

但是当我添加

在 lua 脚本的末尾,它工作得很好。我究竟做错了什么?

0 投票
1 回答
467 浏览

c - 如何在 C 语言中获取 Lua 函数的复杂参数?

我的 Lua 函数将调用这些C函数,其中一个非常复杂,如下所示,我怎样才能得到所有的参数C?参数colors是一个结构类型元素的数组{color, x, y},它的数量不确定。参数region是一个{x, y, width, height}结构类型。

0 投票
1 回答
235 浏览

c - 使用lua的lightuserdata注册定时器回调

我想包装 C 计时器(不是警报)并在 lua 中使用它,我可以指定一个回调函数在一秒钟后触发。为了使用多个定时器,定时器ID和回调将被存储到一个表中,但是当'lua_rawset'被调用时发生了Segmentation fault,所以我使用stack_dump检查lua堆栈,'lua_rawget'返回nil在线66(lr_register_timer,由FIXME标记),这里有什么问题?对不起,我的英语很差。干杯。

lua代码:

C代码:

0 投票
1 回答
296 浏览

c - lua5.2在windows中调用c dll

我的 C 代码如下:

SkypeAnalyzer.h

skypeAnalyzer.c

lua代码如下:

我在vs express 2013中编译dll并生成skypeAnalyzer.dll,但是当我运行lua代码时,出现如下错误:

编译dll时如何动态调用lua52.dll?如何在 VS 2013 中设置?我在vs express 2013中编译dll并生成skypeAnalyzer.dll,但是当我运行lua代码时,出现如下错误:

任何人都可以帮助我吗?

0 投票
2 回答
1615 浏览

lua - 如何预编译传递给 luaL_loadbuffer() 的 Lua?

我正在使用 Lua “C” API 函数luaL_loadbuffer()来运行 Lua 代码。

我有一小部分 Lua 块,我多次调用它们。但是每次我调用luaL_loadbuffer()块时都会重新编译。这似乎非常低效。块引用的大部分代码都是预编译的,但是为什么我每次都需要重新编译块本身呢?我怎样才能避免这种重新编译?

我可以将预编译的块传递给luaL_loadbuffer()吗?

我可以制作返回的 Lua 堆栈的完整副本并重新使用它吗?

还有其他聪明的方法吗?

0 投票
1 回答
957 浏览

c - lua_Integer 和 lua_createtable(表大小限制)

在 Lua 5.3 中,C API 中的表相关函数接收和返回lua_Integer

但是,lua_createtable还是收到int

在下面的示例函数中,源表的长度用于创建相同大小的副本。

但是,需要强制转换才能使警告静音:

警告:从 'lua_Integer' 转换为 'int' 可能会改变其值 [-Wconversion]

在 Lua 邮件列表中搜索,我发现以下关于 Lua 5.2 的线程(我假设也适用于早期版本):

引用:Roberto Ierusalimschy(2012 年 8 月 7 日)

表的大小已经限制为 2147483647 个元素。Lua 内部使用 'int' 来索引它的所有数组(字符串/字节数组除外)。在任何地方都使用无符号值(例如 size_t)是一种痛苦;ptrdiff_t 根本没有任何保证。

long long使用for的 Lua 5.3 仍然是这种情况lua_Integer吗?在 Lua 5.3 中,上面示例中使用的转换为intfrom是否安全?lua_Integer

0 投票
1 回答
2617 浏览

c++ - Adding a userdata metatable to a lua table

I've got a scripting system working well using userdata objects. However, I now want to have a property on my userdata that can take a regular table.

I think what I should do is create a normal table and set the metatable to use my current set of metamethods, however I'm struggling to understand how to do this - I'm sure it's a simple tweak, I just can't see it right now.

My existing code looks like:

The __gc metamethod is in there to delete the LuaWrapped::Ptr class (which is a wrapper to a boost::shared_ptr). I guess I'll leave that along, and store the pointer in a lightuserdata field on the normal table.


Experimental custom metatable against normal table issue (per discussion in comments):

Expected output on a get:

table, string

Actual output on a get (Lua 5.2, Ubuntu 14.04):

boolean, userdata