3
我調用C函數在Lua傳遞數組/表以它作爲參數:是否可以使用c指針訪問Lua表元素?
tools:setColors({255,255,0})
在C函數I得到的尺寸:而不是遍歷表是
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一起工作
我以爲Lua沒有數組 - 一切都是表格。 「陣列」只是帶有鍵1,2,...的表格的語法糖。 –
直到Lua 4纔出現這種情況;在Lua 5中,混合數據結構被用來實現具有獨立陣列和散列表部分的表。請參閱http://www.lua.org/doc/jucs05.pdf的§4。 – legends2k
@Gama如果您使用的是Lua 5+,並且您存儲爲數組元素的數據可以連續存儲它們(例如表格 - 因爲它們是通過引用存儲的) )。我建議你查找Lua實現代碼或者在[Lua郵件列表](http://lua-users.org/)中詢問。 – legends2k