Thanks, it works!<br><br>On Wednesday, February 19, 2020, Phil Thompson <<a href="mailto:phil@riverbankcomputing.com">phil@riverbankcomputing.com</a>> wrote:<br>> On 17/02/2020 14:35, Weitian Leung wrote:<br>>><br>>> Hi,<br>>>     I'm noob in SIP. Say I have two abstract interfaces and one method to<br>>> create the object:<br>>><br>>> struct IUnknown /Abstract/<br>>>><br>>>> {<br>>>>     virtual void AddRef() = 0;<br>>>>     virtual void Release() = 0;<br>>>><br>>>>     %GCClearCode<br>>>>         printf("GCClearCode\n");<br>>>>     %End<br>>>> };<br>>>><br>>>> struct IDemo : public IUnknown /Abstract/<br>>>> {<br>>>>     virtual void SayHi() = 0;<br>>>> };<br>>>><br>>><br>>> void createDemo(IDemo **demo /Out/);<br>>>><br>>><br>>><br>>> Using in python side:<br>>> idemo = demo.createDemo()<br>>> idemo = None<br>>><br>>> Is it possible to write some handwritten code that call the Release method<br>>> when idemo set to None or when  idemo doing GC?<br>>> Or if we can call AddRef automatically when idemo assign to another object.<br>>><br>>> I known that on python side we can call AddRef/Release to make it works,<br>>> but I want the code more python's way.<br>>><br>>> The %GCClearCode handwritten code never called in this case.<br>>> And the %GCTraverseCode handwritten code only call when the object make an<br>>> assignment to other object.<br>>> Am I missing something?<br>>><br>>> Please check the full code in the  attached file.<br>><br>> <a href="https://www.riverbankcomputing.com/static/Docs/sip/c_api.html#event-handlers">https://www.riverbankcomputing.com/static/Docs/sip/c_api.html#event-handlers</a><br>><br>> I've only just realised that that documentation is incomplete. The two event types currently implemented are...<br>><br>> sipEventWrappedInstance,    /* After wrapping a C/C++ instance. */<br>> sipEventCollectingWrapper,  /* When garbage collecting a wrapper object. */<br>><br>> ...and the corresponding event handler signatures are...<br>><br>> typedef void (*sipWrappedInstanceEventHandler)(void *sipCpp);<br>> typedef void (*sipCollectingWrapperEventHandler)(sipSimpleWrapper *sipSelf);<br>><br>> Phil<br>>