【发布时间】:2019-06-08 22:11:18
【问题描述】:
这是我要包装的代码的一部分:
typedef unsigned char UINT8;
...
void fn(UINT8 data[]);
在一个 .i 文件中,我包括:
From 8.2.2 carrays.i:
%array_class(UINT8, UINT8Array)
支持数组写操作:
%typemap(in) UINT8[ANY] ($1_basetype temp[$1_dim0]) {
int i;
if (!PySequence_Check($input)) {
PyErr_SetString(PyExc_ValueError,"Expected a sequence as input");
return NULL;
}
if (PySequence_Length($input) != $1_dim0) {
PyErr_SetString(PyExc_ValueError,"Input sequence size incorrect, should have $1_dim0 ints");
return NULL;
}
for (i = 0; i < $1_dim0; i++) {
PyObject *o = PySequence_GetItem($input,i);
if (PyNumber_Check(o)) {
temp[i] = ($1_basetype)PyInt_AsLong(o);
Py_DECREF(o);
} else {
Py_XDECREF(o);
PyErr_SetString(PyExc_ValueError,"Input sequence elements must be numbers");
return NULL;
}
}
$1 = temp;
}
然后,在编译时,我的代码失败了:
example_wrap.cxx:40:15: error: storage size of ‘temp2’ isn’t known
UINT8 temp2[] ;
请注意,如果我的函数是这样的,则包装有效:
void fn(UINT8 数据[10]);
void fn(UINT8* 数据);
有什么方法可以告诉 swig,当有一个 UINT8[] 来表征它,因为它是一个 UINT8 *。像这样的:
%typemap(in) UINT8[] ($1_basetype *temp) {
谢谢, 巴勃罗
【问题讨论】:
-
如果不传递大小,C 代码应该如何知道数组的长度?
-
我知道你的意思,但是这个函数接收一个指针并以固定(恒定)数量的迭代进行迭代。类似于:fn(uint8 data[]) { for (unsigned n=0; n