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 *.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage