问题标签 [lua-userdata]
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++ - 如何使用 delete 运算符释放 lua_newuserdata 分配的内存?
如何释放分配的内存lua_newuserdata
?
我有一个类叫做Foo
,这个类有构造函数和析构函数,我都需要执行,但是我不知道如何使用 C++ 运算符delete
,因为我没有使用new
分配内存。
我尝试在创建对象的 Lua 函数 new 中这样做:
在 gc 函数中,我尝试了:
但是我遇到了分段错误。
lua - 在 Lua 元表中同时指定“方法”和索引运算符
我需要 userdata 对象来支持方法和索引运算符(带有整数索引)。有没有办法在一个常见的元表中实现这一点,而无需通过函数模拟方法?
我尝试通过将metatable(object).__index
实际方法设置为表以及metatable(metatable(object).__index).__index
实现索引运算符的函数来链接元表。但是,该函数是使用第一个__index
表作为参数调用的,而不是原始对象。__index
这似乎是一个设计疏忽,因为当元方法是一个函数时传递原始对象更有意义。无论如何,有没有办法在不显式检查函数中的方法名称的情况下实现我想要的__index
?
lua - 从纯 Lua 创建新的空用户数据
我想我在 Lua 中的某个地方看到了一个可以返回新用户数据的本机函数。它存在吗?是否可以从普通 Lua 脚本创建自定义用户数据?
c++ - Lua API 推送用户数据
我正在尝试为我的组件系统提供脚本功能。当然,每个组件都有一个字段“parent”,它拥有对父 Actor 的访问权限。我可以编写代码,这样我就可以从 Lua 访问我的 C++ 方法,但是当我想返回自定义用户数据时遇到了困难,比如 actor。我有一个 getParent() 方法,我想返回 Actor 用户数据,所以我可以这样编写 Lua 代码:
我怎样才能做到这一点?使用轻用户数据?或者当 getParent 被调用时,创建一个新的用户数据,并将该指针指向原始用户数据?
c++ - 在 Lua 脚本中使用 C++ 对象
如何在 lua 脚本中使用 C++ 对象?
示例类:
在 lua 中使用的示例(是我需要的):
谢谢!
c++ - 创建属性和方法 Lua C++
这很难解释,我在文档或网络上的任何地方都找不到任何内容,所以我认为这将是解决这个问题的合适地方。
我正在尝试使用 C++ 在 Lua 中的对象上注册属性和方法。
这就是我想要在 Lua 中实现的目标:
我可以使用 C++ 轻松实现示例中的第一行
但是我如何创建方法和:jump()
属性?.setX
.getX
createPlayer
c - Lua 用户数据数组访问和方法
我正在用 C 语言编写用于 Lua 的用户数据类型。它还有一些数组类型的属性和各种方法。现在,如果你属于这种类型,我会使用u:set(k,v)
resp。u:get(k)
访问数据,例如u:sort()
作为方法。为此,我设置__index
了一个包含这些方法的表。现在,如果我想使用u[k] = v
or访问数据u[k]
,我需要设置__newindex
和resp 。但随后其他方法不再可用......__index
set
get
在 C 中处理这个问题的最佳方法是什么?我猜我需要用 C 编写一个函数来注册__index
并在那里处理它。也许检查 key 是否属于 Lua 方法表,如果是则调用它。
任何帮助/提示将不胜感激。我没有找到这样的例子,尽管(对我来说)这似乎是一件很自然的事情。
编辑: 在 Lua 中添加了我的 C 版本解决方案,发布在下面的答案中。这或多或少是直接翻译,所以所有功劳都归于@gilles-gregoire。
以下 C 函数注册为 __index 元方法。
这是执行此操作的代码,
permL_methods
在哪里
并且permL_functions
是
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的lightuserdata注册定时器回调
我想包装 C 计时器(不是警报)并在 lua 中使用它,我可以指定一个回调函数在一秒钟后触发。为了使用多个定时器,定时器ID和回调将被存储到一个表中,但是当'lua_rawset'被调用时发生了Segmentation fault,所以我使用stack_dump检查lua堆栈,'lua_rawget'返回nil在线66(lr_register_timer,由FIXME标记),这里有什么问题?对不起,我的英语很差。干杯。
lua代码:
C代码:
c - Lua调用C/C++时如何找出用户数据的类型
我正在使用 Lua 调用 dll 文件。我的 c/c++ 代码是这样的:
我使用 VS2010 编译了这个 C/C++ 代码。我的 Lua 代码是这样的:
如您所见,在Lua中,参数a和b都是userdata类型,但在C/C++中,a的类型是StructA,b的类型是StrcutB,所以当Lua调用C/C++函数并传递a或b时,C如何/C++ 代码找出参数的类型?请通过将“某些条件”替换为可以完成工作的东西来完成此代码。