这是我想包装的代码的一部分:
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])
无效fn(UINT8*数据)
当有一个UINT8[]将其描述为UINT8*时,我有没有办法告诉swig。大概是这样的:
%typemap(in) UINT8[] ($1_basetype *temp) {
谢谢, 巴勃罗
OP在评论中指出,函数参数的大小是固定的。假设头文件如下所示:
OP的类型映射可以工作,但不知道大小。要让SWIG知道存在固定大小,并且仍然利用通用类型映射,可以使用以下方法:
演示:
相关问题 更多 >
编程相关推荐