Это часть кода, который я хочу обернуть:
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) {
Спасибо,
Пабло