[Snippet:] JNI objectarray to const char**

Unicate

Erfahrenes Mitglied
Hallo alle zusammen!

Nachdem ich gestern eine weile suchen musste um das herauszufinden möchte ich das einfach hier reinposten, damit die Suchmaschinen andere und mich das nächste mal hier her leiten.

PHP:
JNIEXPORT const char** JNICALL Java_de_unicate_snippets_receiveStringArray(JNIEnv * env, jobject obj, jobjectArray array) {
	int size = env->GetArrayLength(array);
	const char **files = new const char*[size];
	for(int i=0;i<size;i++) {
		jobject obj = env->GetObjectArrayElement(array, i);
		const char *tmp = env->GetStringUTFChars((jstring)obj, false);
		files[i] = tmp;
	}
	return files;
}

Jetzt kann man im Java der native Methode ein Object Array (Object[]) geben. In meinem Fall habe ich ein String array (String[]) übergeben und diesen im C wieder eingelesen.

Es wäre vielleicht schön, wenn noch jemand etwas zum releasen des Strings sagen könnte, das weiss ich nicht.

Muss man den jstring (bzw. das jobject) noch releasen?
Wenn ja wann?
Wenn ich die (const char*)'s nicht mehr brauche?
 
Hi.

Natürlich mußt du dafür sorgen, den Speicher wieder ordentlich freizugeben. Da du das files Array (und somit auch die von GetStringUTFChars erzeugten C-Strings) als Rückgabewert der Funktion verwendest, mußt du dafür sorgen, dass der Speicher in dem aufrufenden Programmteil den Speicher freigibt wenn dieser nicht mehr benötigt wird.

Wobei sich hier die Frage stellt, wozu du aus einer JNI C Funktion, welche von Java aus aufgerufen wird, einen const char** zurückgibst.

Gruß
 
Ich glaube der Thread wäre 1) im Java-Forum besser aufgehoben gewesen und 2) vollständig wenn du die passende Java-Klasse sowie die Header-Files ebenfalls posten würdest.
 
Zurück