JNI array von c aus erzeugen und befüllen ?

kroesi

Erfahrenes Mitglied
Hallo !

Angenommen ich habe eine c-Funktion welche ein Feld von ints übernimmt :

Code:
void getArray(int * array, int anzahl);

Rufe ich diese Methode auf, wird "array" von der Methode gefüllt und die Anzahl der Elemente in "array" ist in "anzahl" enthalten.

Soweit so gut, aber ...

... kann ich genau das auch über JNI so aufrufen ?

Ich weiss, daß ich die Elemente eines von Java übergebenen Arrays in C ändern kann;kann ich aber auch neue Java-Arrays in C anlegen ? Das würde mir einiges vereinfachen !

Weiss jemand, ob das geht

Danke,

Krösi
 
Hi.

Also so einfach ist das Ganze leider nicht. Man muß in C spezielle Funktionen benutzen um z.B. an die Länge des Arrays zu kommen und du mußt auch die Funktion Get<Typ>ArrayElements aufrufen damit sichergestellt ist, das der Garbage Collector nicht etwa mittendrin auf die Idee kommt das Array zu verschieben.

http://java.sun.com/docs/books/tutorial/native1.1/implementing/array.html
http://www.ordix.de/onews2/3_2001/siteengine/artikel/sundd_1.html

Um ein neues Array zu kreieren, kannst du in C die Funktion NewIntArray aufrufen.
Code:
jintArray iarr = (*env)->NewIntArray(env, size);
http://java.sun.com/docs/books/jni/download/jni.pdf

Gruß
 
Hallo !

Genau das wars :-) :

Code:
env->NewIntArray

Nach so was hab ich ihm Internet vergeblich gesucht. Hast mein Wochenende gerettet (Kopfzerbrechen etc.)

Vielen Dank und schönes Wochenende ,

Krösi
 
Zurück