Ich habe erfolgreich die folgende typemap in einer swig Interface-Datei, in der Zielsprache Python ist:Mit SWIG typemaps mit java
%typemap(argout) track_t **phash_tracks {
%append_output(SWIG_NewPointerObj(%as_voidptr(*$1), $*1_descriptor, SWIG_POINTER_OWN));
}
%typemap(in) track_t **phash_tracks (track_t *tracks) {
// Alternatively, check if $input is a 0 integer `PyObject`...
if ((SWIG_ConvertPtr($input, (void **) &tracks, $*1_descriptor, SWIG_POINTER_DISOWN)) == -1)
tracks = NULL;
$1 = &tracks;
}
Allerdings, wenn ich die Zielsprache Java ändern, ich habe eine Menge Kompilierung bekommen Zeitfehler, wenn ich die automatisch generierte c-Wrapper-Code versuchen und bauen, die swig produziert, dh
warning: implicit
declaration of function 'SWIG_ConvertPtr' is invalid in C99 [-Wimplicit-function-declaration]
if ((SWIG_ConvertPtr(jarg1, (void **) &tracks1, SWIGTYPE_p_track_t, SWIG_POINTER_DISOWN)) == -1)
error: use of undeclared
identifier 'SWIG_POINTER_DISOWN'
if ((SWIG_ConvertPtr(jarg1, (void **) &tracks1, SWIGTYPE_p_track_t, SWIG_POINTER_DISOWN)) == -1)
error: expected expression
%append_output(SWIG_NewPointerObj(%as_voidptr(*arg1), SWIGTYPE_p_track_t, SWIG_POINTER_OWN));
und so weiter ...
ich stellte fest, dass der Code, der in geklebt wird die die swig Wrappercode im Python Fall, dass die Erklärungen der SWIG_ConvertPtr
, SWIG_POINTER_DISOWN
usw. enthält, stammt aus swigrun.swg
dies in /usr/share/swig2.0/
Diese äquivalente Code eingefügt wird nicht in den swig Wrappercode wenn die Zielsprache befindet ist Java. Ich bin mir nicht ganz sicher, warum das nicht passiert, denn ohne es kann es nicht kompilieren wegen all der fehlenden Deklarationen, die die Typemaps brauchen.
Ist etwas kaputt mit meinem SWIG-Setup oder leide ich an einem grundlegenden Missverständnis, etwas wie Sie können keine typemaps mit Java oder etwas ähnliches verwenden?
Ich bemerkte auch in der c-Wrapper-Code für Java, dass die %append
als in der Schnittstellendatei wörtlich in der automatisch generierten .c-Datei erschien, d.h. Swig hatte es für nichts ersetzt. Dies führte auch zu einem der vielen Kompilierzeitfehler.
so meine Annahme, dass eine .i-Datei Zielsprache Agnostiker ist falsch. Ich dachte, das könnte der Fall sein. Ich muss zurück zu den Dokumenten, ich versuche das gleiche für Java zu erreichen, wie ich es für Python getan habe -> http://stackoverflow.com/questions/36184402/how-to-apply-a- swig-typeMap-für-ein-Doppelzeiger-struct-Argument. I.e. Handle ein Doppelzeigerargument mit einem Typmap – bph
@bph meine Antworten auf http://Stackoverflow.com/a/11967859/168175 und http://Stackoverflow.com/a/12767656/168175 sind ähnliche Beispiele in Java, die ich denke, könnte helfen Sie. – Flexo