【发布时间】:2012-02-10 11:56:06
【问题描述】:
我正在尝试从 python 调用 c 函数,我在 c 中有以下代码。
struct _returndata
{
double* data;
int row;
int col;
};
int mlfAddmatrixW(struct _returndata* retArr)
{
double data[] = {1,2,3,4,5,6,7,8,9}
retArr->row = 3;
retArr->col = 3;
memcpy(retArr->data, data, 9*sizeof(double));
return 1;
}
这是我在 python 中的代码:
class RETARRAY(Structure):
_fields_= [("data", c_double*9),
("row", c_int),
("col", c_int)]
if __name__ == '__main__':
dll = CDLL("/home/robu/Documents/tmo_compile/libmatrix/distrib/libmatrixwrapper.so")
#Initializing the matrix
retArr = pointer(RETARRAY())
for i in retArr.contents.data:
print i;
dll.mlfAddmatrixW(pointer(retArr))
for i in retArr.contents.data:
print i;
print retArr.contents.row
print retArr.contents.col
数据的内容发生了变化,但是 col 和 row 仍然是 0。我该如何解决这个问题?
是否可以在 python 中创建一个动态数组,因为在这种情况下,我创建了一个包含 9 个元素 ("data", c_double*9), 的数组。调用mlfAddmatrixW函数后,我知道数组的大小,数组的大小将是col*row。
【问题讨论】: