Lua库--从C中返回一个数组

我不确定标题是否正确反映了我的问题。

我的雇主向我提供了用C实现的供lua使用的库。他们将其读取从modbus设备中的大量数据,使得:

readFunc(Address,numReads)

将从Address开始读取numRead个寄存器。目前,它以以下方式返回数据:

A,B,C,D = readFunc(1234,4)

但是,我们有些功能需要一次读取32个或更多个数据,我真的不想每次都在我的代码中列出reply1,reply2 ... reply32+。 理想情况下,我想做的是:

array_of_awesome_data = {}
array_of_awesome_data = readFunc(123432

其中array_of_awesome_data [ 1 ]将对应于我们现在的方法中的A。 在我得到的当前C代码中,每个数据都在循环中返回:

lua_pushinteger(L,retData);

如何调整已实现的C lua库以允许lua函数返回数组?

注意:多次读取的循环对我们的设备效率太低,因此我们需要进行1次大型读取。我不知道足够的细节来证明为什么,但这就是我被告知的。

原文链接 https://stackoverflow.com/questions/7031972

点赞
stackoverflow用户596285
stackoverflow用户596285

在 Lua 中,你可以使用 table.pack 接收从函数返回的列表,例如:

array_of_awesome_data = table.pack(readFunc(1234, 32))

而在 C 中,如果想要返回一个表而不是结果列表,你需要先把一个表推到栈上,然后把每个项目推到栈上,并将其添加到表中。其代码类似于以下内容:

num_results=32; /* 自定义设定结果数量 */
lua_createtable(L, num_results, 0);
for (i=0; i<num_results; i++) {
  lua_pushinteger(L, retData[i]);
  lua_rawseti (L, -2, i+1); /* 在 Lua 中索引从 1 开始 */
}
2011-08-11 20:13:39