我在Lua中调用一个C函数,将一个数组/表作为参数传递给它:
tools:setColors({255,255,0})
在C函数中,我得到的大小为:
if (lua_gettop(state) == 2 && lua_istable(state, -1))
{
lua_len(state, -1);
int count = lua_tointeger(state, -1);
lua_pop(state, 1);
}
有没有可能获得指向该数组的C指针,以便稍后用于memcpy
?或者可能还有另一种直接复制数据的方法吗?
更新
我实际上尝试做什么,所以也许有人有更好的解决方案......
在我的Lua脚本中,我用颜色做了一些计算。所有颜色的RGB值都保存在一个大表中(上面的示例将表示一种颜色)。这个表通过setColors调用传递回我的C代码,我通常会使用memcpy将它复制到std :: vector(memcpy(_colors.data(), data, length
);
目前我做了以下事情:
// one argument with array of colors (triple per color)
lua_len(state, -1);
int count = lua_tointeger(state, -1);
lua_pop(state, 1);
for (int i=0; i < count / 3; i++)
{
ColorRgb color; // struct {uint8_t red, uint8_t green, uint8_t blue}
lua_rawgeti(state, 2, 1 + i*3);
color.red = luaL_checkinteger(state, -1);
lua_pop(state, 1);
lua_rawgeti(state, 2, 2 + i*3);
color.green = luaL_checkinteger(state, -1);
lua_pop(state, 1);
lua_rawgeti(state, 2, 3 + i*3);
color.blue = luaL_checkinteger(state, -1);
lua_pop(state, 1);
_colors[i] = color;
}
对于简单的复制操作,对我来说似乎很多代码... 附: 我使用Lua 5.3
答案 0 :(得分:1)
不,不可能通过指针将Lua表用作C数组。
在Lua表中获取和放置值的唯一方法是使用Lua C API。