Fredrik Lundh wrote: > Sheldon wrote: > > > I am very new at this C extensions in Python so my term wrapper was > > probably a misnomer. Perhaps glue is better or the interface that > > allows the exchange of data between Python and C. > > Yes, I am using python objects in my C extension. > > Tell me where I can find out more about this reference counters? Or > > perhaps you can tell something about it. > > http://docs.python.org/ext/refcounts.html > > </F>
Ok, I understand that I need to allocate and deallocate memory for my PyObject: static PyObject* pack_datastruct_to_pyobject(int Row, int Col, int Cat) { PyObject *outobj_lat=NULL; PyObject *outobj_lon=NULL; PyObject *outobj_msgzenithangle=NULL; PyObject *outobj_valconcen=NULL; PyObject *outobj_lightcon=NULL; PyObject *outobj_fracofland=NULL; PyObject *outobj_bias100=NULL; PyObject *outobj_bias75=NULL; PyObject *outobj_bias50=NULL; PyObject *outobj_bias25=NULL; PyObject *outobj_stats=NULL; PyObject *outobj_percentage=NULL; outobj_lat=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.lat15km,Row/res,Col/res,outobj_lat)) goto fail; outobj_lon=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.lon15km,Row/res,Col/res,outobj_lon)) goto fail; outobj_msgzenithangle=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.msgzenithangle15km,Row/res,Col/res,outobj_msgzenithangle)) goto fail; outobj_valconcen=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.valconcen15km,Row/res,Col/res,outobj_valconcen)) goto fail; outobj_lightcon=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.lightcon15km,Row/res,Col/res,outobj_lightcon)) goto fail; outobj_fracofland=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.fracofland15km,Row/res,Col/res,outobj_fracofland)) goto fail; outobj_bias100=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.bias10015km,Row/res,Col/res,outobj_bias100)) goto fail; outobj_bias75=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.bias7515km,Row/res,Col/res,outobj_bias75)) goto fail; outobj_bias50=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.bias5015km,Row/res,Col/res,outobj_bias50)) goto fail; outobj_bias25=PyTuple_New(Row/res*Col/res); if (!createPythonObject_f_2D(work.bias2515km,Row/res,Col/res,outobj_bias25)) goto fail; outobj_stats=PyTuple_New(Cat); if (!createPythonObject_f_1D(work.stats,Cat,outobj_stats)) goto fail; outobj_percentage=PyTuple_New(Cat); if (!createPythonObject_f_1D(work.percentage,Cat,outobj_percentage)) goto fail; return Py_BuildValue("(OOOOOOOOOOOO)", outobj_lat,outobj_lon,outobj_msgzenithangle,outobj_valconcen, outobj_lightcon,outobj_fracofland,outobj_bias100,outobj_bias75, outobj_bias50,outobj_bias25,outobj_stats,outobj_percentage); fail: return NULL; } But just how it is done still eludes me. Can you give some help here? /Sheldon -- http://mail.python.org/mailman/listinfo/python-list