问题标签 [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++ - luabind 如何隐式转换对象?
在不涉及我正在处理的大型多图书馆项目的太多无关细节的情况下,我想问一个关于其中发生的特定事件的问题。我正在使用 Luabind 让我的 C++ 代码与我的 Lua 代码接口,并且我有一个具有继承的类结构,如下所示:
GuiWidget
GuiButton : GuiWidget
我已经通过 Luabind 向 Lua 注册了这两个类。然后我执行以下操作,指向类widget
实例的指针在哪里GuiWidget
:
现在,同样的代码片段可以处理从按钮到滚动条甚至整个窗口的任何内容。因此,稍后在 lua 代码中,当单击复选框按钮时,我将这行代码称为:
这行得通。即使推送的指针是一个GuiWidget
指针,lua 代码也知道要使用GuiButton
该特定实例的类独有的功能。它是如何做到的?它如何获取一个小部件指针并自动知道特定的小部件是一个按钮?我不相信这是可能的,所以我花了一段时间才找到那个解决方案,但我想我会在黑暗中拍摄,它以某种方式起作用。
c++ - 使用 LuaBridge 从 C++ 调用 Lua 函数
我在使用 LuaBridge 从 C++ 调用 Lua 函数时遇到了一些麻烦。这个想法是我想在 C++ 中的每个游戏更新上调用脚本上的“更新”。以下代码是我在网上找到的:
所以在我的情况下,这将是:
但是, LuaBridge 2.0(命名空间)getGlobal
中似乎不存在。luabridge
这不同于lua_getglobal
我想知道这是否已被不同的函数调用替换,或者是否已在 2.0 版本中被弃用。我当然可以使用普通的 C Lua 方法,但我想知道这是否在 LuaBridge 中被抽象(为了让事情更容易)
c++ - ./lua/addtest.lua:9: 尝试索引本地“testobj”(用户数据值)]]
test.exe调用addTest.lua并设置lua_testobj
到表中,addTest.lua调用testobj.dll,但是testobj.dll不能得到“lua_testobj”
错误消息是
addTest.lua:9 尝试索引本地“testobj”(用户数据值)
测试程序
/li>addtest.lua 代码如下
/li>testobj.dll 源代码如下
/li>
c++ - lua 函数参数预计在附近
我尝试在 C++ 项目中使用 lua。对于 lua 执行,我这样写:
和 lua 脚本:
那没有用,我收到错误消息:
但是当我添加
在 lua 脚本的末尾,它工作得很好。我究竟做错了什么?
c - 如何在 C 语言中获取 Lua 函数的复杂参数?
我的 Lua 函数将调用这些C
函数,其中一个非常复杂,如下所示,我怎样才能得到所有的参数C
?参数colors
是一个结构类型元素的数组{color, x, y}
,它的数量不确定。参数region
是一个{x, y, width, height}
结构类型。
c - 使用lua的lightuserdata注册定时器回调
我想包装 C 计时器(不是警报)并在 lua 中使用它,我可以指定一个回调函数在一秒钟后触发。为了使用多个定时器,定时器ID和回调将被存储到一个表中,但是当'lua_rawset'被调用时发生了Segmentation fault,所以我使用stack_dump检查lua堆栈,'lua_rawget'返回nil在线66(lr_register_timer,由FIXME标记),这里有什么问题?对不起,我的英语很差。干杯。
lua代码:
C代码:
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代码时,出现如下错误:
任何人都可以帮助我吗?
lua - 如何预编译传递给 luaL_loadbuffer() 的 Lua?
我正在使用 Lua “C” API 函数luaL_loadbuffer()
来运行 Lua 代码。
我有一小部分 Lua 块,我多次调用它们。但是每次我调用luaL_loadbuffer()
块时都会重新编译。这似乎非常低效。块引用的大部分代码都是预编译的,但是为什么我每次都需要重新编译块本身呢?我怎样才能避免这种重新编译?
我可以将预编译的块传递给luaL_loadbuffer()
吗?
我可以制作返回的 Lua 堆栈的完整副本并重新使用它吗?
还有其他聪明的方法吗?
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 中,上面示例中使用的转换为int
from是否安全?lua_Integer
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