Re: How to write handwritten code to access the C++ object when the corresponding python object destroyed?
Phil Thompson <[email protected]>
| Newsgroups | gmane.comp.python.pyqt-pykde |
|---|---|
| Message-ID | <[email protected]> |
Have a look at %MethodCode for dtors. Phil On 19/02/2020 14:19, Weitian Leung wrote: > One more question, is it possible to insert handwritten code to the > MappeedType's release_XXX? > > When mapped one type to python's str, which type has it's own alloc > method > (The BSTR for example, SysStringAlloc etc). After passed to the C++ > call > and returned, we need to free the memory using it's own dealloc method. > > So is it possible do that? Or other way to call the dealloc method... > > On Wednesday, February 19, 2020, Weitian Leung <[email protected]> > wrote: >> Thanks, it works! >> >> On Wednesday, February 19, 2020, Phil Thompson < > [email protected]> wrote: >>> On 17/02/2020 14:35, Weitian Leung wrote: >>>> >>>> Hi, >>>> I'm noob in SIP. Say I have two abstract interfaces and one >>>> method > to >>>> create the object: >>>> >>>> struct IUnknown /Abstract/ >>>>> >>>>> { >>>>> virtual void AddRef() = 0; >>>>> virtual void Release() = 0; >>>>> >>>>> %GCClearCode >>>>> printf("GCClearCode\n"); >>>>> %End >>>>> }; >>>>> >>>>> struct IDemo : public IUnknown /Abstract/ >>>>> { >>>>> virtual void SayHi() = 0; >>>>> }; >>>>> >>>> >>>> void createDemo(IDemo **demo /Out/); >>>>> >>>> >>>> >>>> Using in python side: >>>> idemo = demo.createDemo() >>>> idemo = None >>>> >>>> Is it possible to write some handwritten code that call the Release > method >>>> when idemo set to None or when idemo doing GC? >>>> Or if we can call AddRef automatically when idemo assign to another > object. >>>> >>>> I known that on python side we can call AddRef/Release to make it >>>> works, >>>> but I want the code more python's way. >>>> >>>> The %GCClearCode handwritten code never called in this case. >>>> And the %GCTraverseCode handwritten code only call when the object >>>> make > an >>>> assignment to other object. >>>> Am I missing something? >>>> >>>> Please check the full code in the attached file. >>> >>> > https://www.riverbankcomputing.com/static/Docs/sip/c_api.html#event-handlers >>> >>> I've only just realised that that documentation is incomplete. The >>> two > event types currently implemented are... >>> >>> sipEventWrappedInstance, /* After wrapping a C/C++ instance. */ >>> sipEventCollectingWrapper, /* When garbage collecting a wrapper >>> object. > */ >>> >>> ...and the corresponding event handler signatures are... >>> >>> typedef void (*sipWrappedInstanceEventHandler)(void *sipCpp); >>> typedef void (*sipCollectingWrapperEventHandler)(sipSimpleWrapper > *sipSelf); >>> >>> Phil >>> _______________________________________________ PyQt mailing list [email protected] https://www.riverbankcomputing.com/mailman/listinfo/pyqt