Wie konvertiere ich SWIGTYPE_p_void in SWIG-generierte Java-Bindungen?
Ich entwickle einige SWIG-generierte Java-Bindungen für eine C-Bibliothek. Die Bibliothek enthält Funktionen, die Parameter vom Typ annehmenvoid *
. Auf der C-Seite werden diese normalerweise als Zeiger auf ein Array vom Typ übergebenfloat
oderint
Besetzung zuvoid *
. In den generierten Java-Bindungen führt dies zu Methoden, die Parameter vom Typ annehmenSWIGTYPE_p_void
.
Was ist der beste Weg, um ein Array von floats / ints in den Java-Bindungen so zu konstruieren, dass sie als Typ übergeben werden können?SWIGTYPE_p_void
zu diesen Methoden?
Momentan definiere ich eine Hilfsfunktion in meiner example.i-Datei:
void *floata_to_voidp(float f[])
{
return (void *)f;
}
Und dann auf der Java-Seite so etwas tun:
float foo[] = new float[2];
SWIGTYPE_p_void av = null;
// do something with foo
av = example.floata_to_voidp(foo);
example.myfunction(av);
Das wirkt eher hässlich, zumal ich auch einen brauchen würdeinta_to_voidp()
etc in meiner SWIG-Interface-Datei für jede Typkonvertierung, die ich unterstützen möchte.
Gibt es eine Möglichkeit, dies ohne Hilfsfunktionen und mit weniger zusätzlichem Code auf der Java-Seite zu tun, um Datentypen zu konvertieren?
UPDATE (17.6.12): Um die Frage noch detaillierter zu behandeln: Ich versuche, eine Reihe von C-Funktionen mit Prototyp zu verwendenint foo(const float *data, int N, const void *argv, float *result)
und ordnen Sie sie Methoden auf der Java-Seite zu, in denen ein Array beliebigen Typs als übergeben werden kannargv
. Beachten Sie, dassargv
istconst void *
und nichtvoid *
.