One more question, is it possible to insert handwritten code to the MappeedType's release_XXX?<br><br>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.<br><br>So is it possible do that? Or other way to call the dealloc method...<br><br>On Wednesday, February 19, 2020, Weitian Leung <<a href="mailto:weitianleung@gmail.com">weitianleung@gmail.com</a>> wrote:<br>> 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>>>