Das Buch "Essential JNI: Java Native Interface" von Rob Gordon enthält das folgende Codebeispiel zum Konvertieren eines Jstrings in einen C-String:
const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(str, utf_string);
}
Beachten Sie, dass nur aufgerufen wird, ReleaseStringUTFChars
wenn dies der isCopy
Fall ist.
Das Buch Java Native Interface: Programmierhandbuch und Spezifikation (alternativer Link :) http://192.9.162.55/docs/books/jni/html/objtypes.html#5161
lautet jedoch:
Der Aufruf von ReleaseString-Chars ist erforderlich, unabhängig davon, ob GetStringChars * isCopy auf JNI_TRUE oder JNI_FALSE gesetzt hat. ReleaseStringChars gibt entweder die Kopie frei oder hebt die Instanz auf, je nachdem, ob GetStringChars eine Kopie zurückgegeben hat oder nicht.
Ich gehe zu Recht davon aus, dass dies ein Fehler in Gordons Buch ist.
quelle
str
definiert?Antworten:
Ja, Ihre Annahme ist richtig (Sie sollten immer ReleaseStringUTFChars aufrufen).
quelle