From: jiangzhiyang <ja...@gm...> - 2008-05-23 02:08:25
|
Judicaël Bedouet 写道: > Hello swig users, > > I would like to use a class in a class which belongs to another Java > package. Both are generated by swig. > > So, I tried to compile the typemap(javapackage) example in SWIG-1.3 > documentation (paragraph 20.8.10 Director specific typemaps) but it > doesn't work for me. > > With the javapackage typemap, we could specify the name of the package > for an extern class but the corresponding import is not automatically > added in the generated Java file. However, with the javaimports > typemap, we could specify the import in the class. > > I wonder why the corresponding import is not automatically added in > the Java file. All the more so since the import must also be added to > the file <module>JNI.java and I don't know how to do it. > > Below are example files. > > After having manually added "import com.wombat.foo.*;" to > module_exampleJNI.java, I can't compile Example.java because of the > following error: > > com/wombat/example/Example.java:39: getCPtr(com.wombat.foo.Foo) has > protected access in com.wombat.foo.Foo > module_exampleJNI.Example_ping(swigCPtr, this, > Foo.getCPtr(arg1),arg1, Bar.getCPtr(arg2), arg2); > > Here are my compilation commands. > > mkdir -p com/wombat/example > mkdir -p com/wombat/foo > /opt/swig-1.3.35/bin/swig -c++ -java -package com.wombat.example > -outdir com/wombat/example Example.i > /opt/swig-1.3.35/bin/swig -c++ -java -package com.wombat.foo -outdir > com/wombat/foo Foo.i > /usr/java/jdk1.5.0_14/bin/javac com/wombat/foo/Foo.java > /usr/java/jdk1.5.0_14/bin/javac com/wombat/example/Example.java > > I would be very grateful if someone knows how to deal with multiple packages. > > J. B. > > > // Foo.i > > %module module_foo > %{ > %} > > %inline { > class Foo { > public: > Foo (); > }; > } > > // Example.i > > %module module_example > %{ > %} > > %import "Foo.i" > %typemap("javapackage") Foo, Foo *, Foo & "com.wombat.foo"; > %feature("director") Example; > > %typemap(javaimports) Example " > import com.wombat.foo.*; > " > > %inline { > class Bar {}; > > class Example { > public: > virtual ~Example (); > void ping (Foo *arg1, Bar *arg2); > }; > } > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Swig-user mailing list > Swi...@li... > https://lists.sourceforge.net/lists/listinfo/swig-user > > Try this: // Foo.i %module module_foo %{ %} *%typemap(javabody) SWIGTYPE %{ private long swigCPtr; protected boolean swigCMemOwn; public $javaclassname(long cPtr, boolean cMemoryOwn) { swigCMemOwn = cMemoryOwn; swigCPtr = cPtr; } public static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} * %inline { class Foo { public: Foo (); }; } // Example.i %module module_example %{ %} %import "Foo.i" %typemap("javapackage") Foo, Foo *, Foo & "com.wombat.foo"; %feature("director") Example; %typemap(javaimports) Example "import com.wombat.foo.*;" *%pragma(java) jniclassimports=%{ import com.wombat.foo.*; %}* %inline { class Bar {}; class Example { public: virtual ~Example (); void ping (Foo *arg1, Bar *arg2); }; } |