SWIG-将C字符串数组包装到python列表中

| 我想知道使用SWIG将C中的字符串数组包装到Python列表的正确方法是什么。 该数组在struct内部:
typedef struct {
   char** my_array;
   char* some_string; 
}Foo;
SWIG自动将some_string包装为python字符串。 我应该在SWIG接口文件中放入什么,以便可以在Python中作为常规Python字符串列表[\'string1 \',\'string2 \']访问my_array? 我已将typemap用作Sugested:
%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。 我想知道是否是因为char **在结构内部?也许我需要通知SWIG? 有任何想法吗?     
已邀请:
我认为SWIG中没有可以自动处理此转换的选项。您需要使用SWIG的Typemap功能并手动编写类型转换器。在这里,您可以找到从Python列表到char **的转换http://www.swig.org/Doc1.3/Python.html#Python_nn59,因此完成了一半的工作。您现在需要做的是检查Typemap的其余文档,并将转换器从char **写入Python列表。     
我不是这方面的专家,但我认为:
%typemap(python,out) char** {
适用于返回char **的函数。您的char **位于结构内部。看看swig生成的代码,以确认是否应用了地图。 您可能必须使用类似:
%typemap(python,out) struct Foo {
具有在返回的Foo结构上工作的地图。 背景:我使用了与您使用的相同的typemap定义,但随后成功使用了char **。     
很抱歉,我的话题有点偏离主题,但是如果您愿意,我强烈建议您使用ctypes而不是swig。这是我之前在ctypes上下文中问过的一个相关问题:将字符串列表从python / ctypes传递到C函数,期望使用char **     

要回复问题请先登录注册