On Fri, 19 Feb 2010 11:24:40 +0100, Sébastien Petitdemange <[email protected]> wrote: > Sébastien Petitdemange wrote: >> Phil Thompson wrote: >>> On Fri, 19 Feb 2010 10:42:51 +0100, Sébastien Petitdemange >>> <[email protected]> wrote: >>>> Hi Phil, >>>> >>>> We use the latest sip (4.10) to wrap your C++ library and I think I >>>> found a bug in the wrapping code generated by sip. >>>> >>>> Sip Code: >>>> >>>> class HwSyncCtrlObj >>>> { >>>> %TypeHeaderCode >>>> #include <HwSyncCtrlObj.h> >>>> using namespace lima; >>>> %End >>>> public: >>>> struct ValidRangesType >>>> { >>>> double min_exp_time; >>>> double max_exp_time; >>>> double min_lat_time; >>>> double max_lat_time; >>>> const char* __repr__(); >>>> %MethodCode >>>> std::ostringstream str; >>>> str << *sipCpp; >>>> sipRes = str.str().c_str(); >>>> %End >>>> }; >>>> >>>> virtual void getValidRanges(HwSyncCtrlObj::ValidRangesType& range >>>> /Out/) = 0; >>>> }; >>>> >>>> C++ Code result: >>>> >>>> void sipVH_lima_8(sip_gilstate_t sipGILState,PyObject >>>> *sipMethod,HwSyncCtrlObj::ValidRangesType& a0) >>>> { >>>> PyObject *resObj = sipCallMethod(0,sipMethod,""); >>>> >>>> if (!resObj || >>>> >>> sipParseResult(0,sipMethod,resObj,"D4",sipType_HwSyncCtrlObj_ValidRangesType,&a0) >>>> < 0) >>>> PyErr_Print(); >>>> >>>> Py_XDECREF(resObj); >>>> Py_DECREF(sipMethod); >>>> >>>> SIP_RELEASE_GIL(sipGILState) >>>> } >>>> >>>> We try to get the pointer of a0 instead of the reference! >>>> >>>> Is it a bug or miss I something? >>> If you are referring to the use of &a0 in the call to sipParseResult() >>> then >>> that is correct. >>> >>> Phil >>> >> >> Hi Phil, >> >> It's not correct because you want to fill the structure instead of >> retrieve the pointer of that structure. >> >> I made a small patch: >> >> void sipVH_lima_8(sip_gilstate_t sipGILState,PyObject >> *sipMethod,HwSyncCtrlObj::ValidRangesType& a0) >> { >> PyObject *resObj = sipCallMethod(0,sipMethod,""); >> >> HwSyncCtrlObj::ValidRangesType *tmpValue = NULL >> if (!resObj || >> sipParseResult(0,sipMethod,resObj,"D4",sipType_HwSyncCtrlObj_ValidRangesType,tmpValue) >> < 0) >> PyErr_Print(); >> else >> a0 = *tmpValue; >> >> Py_XDECREF(resObj); >> Py_DECREF(sipMethod); >> >> SIP_RELEASE_GIL(sipGILState) >> } >> >> >> Sorry I wasn't really clear In my first mail... >> >> Regards, >> >> SEB >> >> _______________________________________________ >> PyQt mailing list [email protected] >> http://www.riverbankcomputing.com/mailman/listinfo/pyqt > > Sorry there is a mistake it: > > sipParseResult(0,sipMethod,resObj,"D4",sipType_HwSyncCtrlObj_ValidRangesType,&tmpValue) > > instead of : > > sipParseResult(0,sipMethod,resObj,"D4",sipType_HwSyncCtrlObj_ValidRangesType,tmpValue) > > SEB
Got it now... Should be fixed in tonight's SIP snapshot. Thanks, Phil _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
