您的示例有点困惑,因为您的C函数使用Foo *,但是您的类型映射使用Foo **(即Foos数组与指向Foos的指针数组).我假设您的意思是后者,因为这是从给出的函数声明中判断数组有多长时间的唯一明智的方法.
在眼前的问题上,“如何将Python对象转换为给定类型的C指针?”我通常通过让SWIG为我生成一些代码然后对其进行检查来解决该问题.因此,例如,如果您有一个函数void bar(Foo *);然后SWIG将在包装器中生成一些代码:
SWIGINTERN PyObject *_wrap_bar(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
Foo *arg1 = (Foo *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:bar",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Foo, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "bar" "', argument " "1"" of type '" "Foo *""'");
}
arg1 = reinterpret_cast< Foo * >(arg