Lightuserdata与userdata不同,那么我该怎么办呢?我的意思是lua中lightuserdata的操作。看起来我无法将其转换为任何其他数据类型。
我的一个案例:
我的C库返回一个名为'c_pointer'的C指针,AKA lightuserdata到Lua,然后我想:
my_pointer = c_pointer +4
然后将'my_pointer'传递回C库。由于我无法对'c_pointer'执行任何操作,因此表达式'c_pointer + 4'无效。
我想知道有一些实用的解决方案吗?
答案 0 :(得分:2)
Lightuserdata由C库创建。它们只是C指针。
例如,您可以使用它们来引用您使用malloc
分配的数据,或者在模块中静态分配。您的C库可以使用lua_pushlightuserdata
将这些指针作为lightuserdata传输到Lua端,然后Lua可以将它返回到堆栈上的库(或其他C代码)。 Lua代码可以将lightuserdata用作任何其他值,例如,甚至作为表键存储在表中。
附录
要回答修改后的问题,如果要为指针添加偏移量,请在C侧执行此操作。将lightuserdata和整数偏移量传递给C,然后让C使用ptr[n]
void * ptr = lua_touserdata(L, idx1);
lua_Integer n = lua_tointeger(L. idx2);
// do something with
((char *)ptr)[n];
答案 1 :(得分:0)
Plain Lua没有指针算术,因此Doug Currie表示你需要在C端进行指针运算。
另一方面,