SWIG - Обернуть массив строк C в список python

Мне было интересно, как правильно обернуть массив строк на 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?

Есть идеи?

6
задан Fabio Cabral 20 April 2011 в 18:45
поделиться