SWIG Lua 和传递数组

4

我目前有以下Lua代码:

    g = engine.CGeometry()

    vertexes = {}

    vertexes[1] = 0
    vertexes[2] = 0
    vertexes[3] = 0

    vertexes[4] = 0
    vertexes[5] = -1
    vertexes[6] = 0

    vertexes[7] = -1
    vertexes[8] = 0
    vertexes[9] = 0

    print "adding vertexes"
    g:SetVertexes(vertexes)

g:SetVertexes()在C++中的实现如下:

void CGeometry::SetVertexes(double* vertexes){
    this->vertexes = vertexes;
}

导致出现此错误:

adding vertexes
PANIC: unprotected error in call to Lua API (Error in SetVertexes (arg 2), expected 'double *' got 'table')
Press any key to continue . . .

有什么想法吗?

顶点的数据类型是什么? - Vinay
目前我已通过添加SetVertex(int idx, double vertex)来规避这个问题。 - Tom J Nowell
我在使用Python时遇到了类似的问题。在SWIG中,表格(或Python中的列表)无法转换为数组。 - None
2个回答

1
尝试编写:
void CGeometry::SetVertexes(double vertexes[]);

在接口定义中。从文档来看,SWIG区分指针和数组。


有一次我将 double* vertexes 改为 double vertexes[],但是仍然出现了相同的错误。 - Tom J Nowell

0

您可以使用carrays.i模块,如此处所述:http://www.swig.org/Doc1.3/Library.html

例如,您在C++中有这样的函数:

void fun(double arr[]) { }

然后在 .i 文件中加载模块:

%include "carrays.i"
%array_functions(double, doubleArray);
void fun(double arr[]);

在 Lua 脚本中:

a = new_doubleArray(10)           # Create an array
doubleArray_setitem(a,0,5.0)      # Set value 5.0 on index 0
fun(a)                            # Pass to C
delete_doubleArray(a)             # Destroy array

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接