2013-09-24 7 views
11

Rozwijam aplikację dla systemu Android przy użyciu jni.
I użyłem funkcji GetStringUTFChars następującoParametr funkcji GetStringUTFChars

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

Ale widziałem kolejny przykład jak ten

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

Zarówno działa dobrze. Ale nie mogę znaleźć żadnej dokumentacji o byłym gramacie, nawet jeśli jest to bardziej zwięzłe.

Gdzie mogę znaleźć dokumentację i czy istnieje między nimi różnica?

+0

Czy rozważałeś skonsultowanie specyfikacji JNI? Wszystko tam jest. – EJP

Odpowiedz

12

Pierwszy przykład to składnia C++ i będzie działać tylko w programach w C++. Drugi dotyczy programów C.

Powód, dla którego te dwie rzeczy się różnią, jest taki, że w C++ JNIEnv jest klasą, a funkcje są funkcjami składowymi obiektu env, natomiast w C JNIEnv jest wskaźnikiem do struktury. Ponieważ to, co otrzymujesz jako parametr, jest wskaźnikiem do JNIEnv, w C musisz go usunąć, aby uzyskać dostęp do członków struktury, dlatego musisz użyć *env zamiast env.

Powinny być one opisane w dowolnym tekście dotyczącym korzystania z JNI, ale można go również znaleźć, czytając kod w pliku nagłówkowym.

+0

Dzięki za pomoc i oszczędność czasu ... –

Powiązane problemy