Hello folks,

I'm trying to generate python bindings of my application.
I got a problem in virtual handler that return class-type.
I can not get correct return value in C++ side.


C++ and SIP code:

class RpdSheet : QObject {
public:
  RpdSheet(const char* = 0);
  virtual RpdRect2D boundingRect();
[...]
};


Generated binding code is:

RpdRect2D sipRpdSheet::sipVH_boundingRect(const sipMethodCache *pymc,sipThisType 
*sipThis,int sipRelLock)
{
        RpdRect2D *res;
        PyObject *resobj;
        PyObject *sipArgs;

        sipArgs = Py_BuildValue("(O)",sipThis -> sipSelf);

        if (sipArgs == NULL)
                goto reportError;

        resobj = PyEval_CallObject(pymc -> pyMethod,sipArgs);

        Py_DECREF(sipArgs);

        if (resobj != NULL)
        {
                bool iserr = false;

                if (sipCanConvertToCpp(resobj,sipClass_RpdRect2D))
                        res = (RpdRect2D 
*)sipConvertToCpp(resobj,sipClass_RpdRect2D,&iserr);
                else
                        iserr = true;

                Py_DECREF(resobj); // !!!!!!!! HERE !!!!!!!!
                                   // !!!!!  *res is released ???

                if (!iserr)
                        goto releaseLock;

                
sipBadVirtualResultType(sipName_rapid2_RpdSheet,sipName_qt_boundingRect);
        }

reportError:
        PyErr_Print();

releaseLock:
        sipCondReleaseLock(sipRelLock);

        return *res;
}

In sipVH_xxxx() generated by sip-0.9, do Py_DECREF(resobj)
before return. I think, when Py_DECREF do, the memory pointed
 by 'res' released, correct?

Does anyone have this solution? 

thanks in advanse.

------------------------------------------
Masaki Fukuda <[EMAIL PROTECTED]>
(BCDE)Weathernews, Inc.
Phone:043-274-5508, FAX:043-274-4957,4955



Reply via email to