Мне было интересно, как правильно обернуть массив строк на C в список Python с помощью SWIG.
Массив находится внутри структуры:
typedef struct {
char** my_array;
char* some_string;
}Foo;
SWIG автоматически обертывает some_string в строку Python.
Что мне следует поместить в файл интерфейса SWIG, чтобы я мог получить доступ к my_array в Python как к обычному списку строк Python ['string1', 'string2']?
Я использовал typemap, как было предложено:
%typemap(python,out) char** {
int len,i;
len = 0;
while ($1[len]) len++;
$result = PyList_New(len);
for (i = 0; i < len; i++) {
PyList_SetItem($result,i,PyString_FromString($1[i]));
}
}
Но это все равно не сработало. В Python переменная my_array отображается как SwigPyObject: _20afba0100000000_p_p_char.
Интересно, связано ли это с тем, что символ ** находится внутри структуры? Может быть, мне нужно сообщить об этом SWIG?
Есть идеи?