From: Bob M. <rma...@ee...> - 2007-02-08 15:06:04
|
William S Fulton wrote: > Bob Marinier wrote: > >> I recently discovered a case in our code where it looks like we need to >> use %delobject on one of our methods. However, there does not appear to >> be any change in the generated C++ or Java code (indeed, things still >> crash for us). Is %delobject implemented for Java? >> >> Just to see if, in principle, this change would work, we hand-modified >> the generated Java code to set swigCMemOwn flag of the parameter to the >> method to false, and this does indeed fix our problem. If %delobject is >> not implemented for Java, is there a way to automatically insert this >> code in the beginning of the generated Java code for this method? I >> suppose I could rename the generated method and create a wrapper method >> with the original name that sets this flag and then calls the renamed >> method, but being able to insert code directly into the generated Java >> would be cleaner. >> >> > > There is no DISOWN typemap for Java, so %delobject won't work as it > requires these typemaps. Instead you can modify the code through the > javain typemap. See the documentation in Java.html about memory > management, there are some examples too. > > William > I'm not sure I follow. I have a function in C++ that looks like this: ElementXML_Handle ElementXML::AddChild(ElementXML* pChild); The generated Java code looks like this: public SWIGTYPE_p_ElementXML_InterfaceStructTag AddChild(ElementXML pChild) { long cPtr = smlJNI.ElementXML_AddChild(swigCPtr, this, ElementXML.getCPtr(pChild), pChild); return (cPtr == 0) ? null : new SWIGTYPE_p_ElementXML_InterfaceStructTag(cPtr, false); } ...but I want it to look like this: public SWIGTYPE_p_ElementXML_InterfaceStructTag AddChild(ElementXML pChild) { pChild.swigCMemOwn = false; long cPtr = smlJNI.ElementXML_AddChild(swigCPtr, this, ElementXML.getCPtr(pChild), pChild); return (cPtr == 0) ? null : new SWIGTYPE_p_ElementXML_InterfaceStructTag(cPtr, false); } I've been playing with the javain typemap, and it just seems to change the ElementXML.getCPtr(pChild) part of the function. Also, I didn't see anything in the memory management section of the Java documentation that addresses this issue. What am I missing? Thanks, Bob |