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
<<attachment: sebastien_petitdemange.vcf>>
_______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
