2013-09-24 8 views
11

Sto sviluppando l'app per Android utilizzando jni.
E funzione GetStringUTFChars ho utilizzati nel modo seguenteParametro funzione GetStringUTFChar

jboolean iscopy; 
const char* trainfile = (env)->GetStringUTFChars(jstr, &iscopy); 

Ma ho visto un altro esempio come questo

const char *inCStr = (*env)->GetStringUTFChars(env, inJNIStr, NULL); 

Entrambi funziona bene. Ma non riesco a trovare alcuna documentazione sul precedente grammatico, anche se è più conciso.

Dove posso trovare la documentazione e c'è qualche differenza tra loro?

+0

Hai preso in considerazione la possibilità di consultare la specifica JNI? È tutto lì dentro. – EJP

risposta

12

Il primo esempio è la sintassi C++ e funzionerà solo nei programmi C++. Il secondo è per i programmi C.

Il motivo per cui i due sono diversi è che in C++ JNIEnv è una classe e le funzioni sono funzioni membro dell'oggetto env, mentre in C JNIEnv è un puntatore a una struttura. Poiché ciò che si riceve come parametro è un puntatore a JNIEnv, in C è necessario dereferenziarlo per accedere ai membri della struct, ecco perché è necessario utilizzare *env al posto di env.

Questo dovrebbe essere trattato in qualsiasi testo su come utilizzare JNI, ma è anche possibile trovarlo leggendo il codice nel file di intestazione.

+0

Grazie per l'aiuto e risparmiando il mio tempo ... –