在使用JNI的時候,要注意JAVA中傳入的參數要和C++的參數要意義對應。
boolean在JNI中對應jboolean,是8字節(unsigned)
byte在JNI對應jbyte,是8字節。
char在JNI對應jchar,是16字節(unsigned)
short在JNI對應jshort,是16字節
int在JNI對應jint,是32字節
long在JNI對應jlong,是64字節
float在JNI對應jfloat,是32字節
double在JNI對應jdouble,是64字節
void在JNI對應void,貌似是沒有大小(n/a).
這些基本的都是一一對應的。除了上面的類型,你還可以直接傳一個相當於是JAVA的自定義類,具體方法如下:
在JAVA中有Obiect的類,在C++中同樣有對應的類jobject。我們知道任何的類都繼承與Object,那麼我們就可以通過jobject來延伸出各種類。例如接受一個String類型的對象:
JNIEXPORT jstring JNICALL XXX_XXX_XXX_getString(JNIEnv *env,jobject obj,jstring string){
char buf[128];
const char *str=(*env)->GetStringUTFChars(env,string,0);
(*env)->ReleaseStringUTFChars(env,string,str);
}
(不全,因有事)