From: <ne...@do...> - 2006-03-18 16:32:48
|
> ne...@do... wrote: >> First of all, I am really impressed of the versatility and completeness of SWIG. I >> am destined to use it for generating all necessary language bindings for some work >> projects and consider it perfect, but: >> >> When generating a JNI wrapper from a .swg file, the JNI methods use the jarg[1..] >> naming for arguments, while the c# wrapper uses the names that I use in the .swg >> file. This is quite a shame for SWIG as many editors now show the argument names. >> >> Example: >> >> bar.swg: >> extern int foo(int a, float b); >> >> becomes barJNI.java: >> public static final native int foo(int jarg1, float jarg2); >> >> and bar.cs: >> public static int foo(int a, float b) {...} >> >> Is this due to JAVA naming conventions or a SWIG shortcoming? >> > > I think it is a shortcoming in your observations ;) This is what is > generated: > > bar.java: > public static int foo(int a, float b) { > > bar.cs: > public static int foo(int a, float b) { > > However, in the intermediary classes: > > barJNI.java: > public final static native int foo(int jarg1, float jarg2); > > barPINVOKE.cs: > public static extern int foo(int jarg1, float jarg2); > > The intermediary classes are implementation detail classes, so we never > bothered with nice parameter names and in fact the parameter names > purposefully match those in the C/C++ layer. Using arg1 and jarg1 etc in > the C/C++ code is historic, but I think there is more chance of symbol > clashes if using the original parameter names. Note that more recent > versions of SWIG has getter better: > > void foo(int in); > > used to generate C# proxy class code with parameter names that didn't > compile. So in summary, the idea is that the functions that the user > ultimately uses have the nice parameter names. > > William > Great thanks for the explanation. Now I feel safe with SWIG and will go on, actually using it. Christian |