handling refrence to pointers/double pointers using SWIG [C++ to Java]
- by Siddu
My code has an interface like
class IExample { ~IExample(); //pure virtual methods ...};
a class inheriting the interface like
class CExample : public IExample { protected: CExample(); //implementation of pure virtual methods ... };
and a global function to create object of this class -
createExample( IExample *& obj ) { obj = new CExample(); } ;
Now, I am trying to get Java API wrapper using SWIG, the SWIG generated interface has a construcotr like - IExample(long cPtr, boolean cMemoryOwn) and global function becomes createExample(IExample obj )
The problem is when i do,
IExample exObject = new IExample(LogFileLibraryJNI.new_plong(), true /*or false*/ );
createExample( exObject );
The createExample(...) API at C++ layer succesfully gets called, however, when call returns to Java layer, the cPtr (long) variable does not get updated. Ideally, this variable should contain address of CExample object.
I read in documentation that typemaps can be used to handle output parameters and pointer references as well; however, I am not able to figure out the suitable way to use typemaps to resolve this problem, or any other workaround.
Please suggest if i am doing something wrong, or how to use typemap in such situation?