JNI系列文章:java
即上一篇JNI系列之入門Hello JNI C(一)簡單介紹後,這篇將詳細講解C中的全部代碼。c++
/* * Class: com_jerry_jnitest_JniTest * Method: getStringFromC * Signature: ()Ljava/lang/String; */
JNIEXPORT jstring JNICALL Java_com_jerry_jnitest_JniTest_getStringFromC (JNIEnv *, jclass);
複製代碼
public native static String getStringFromC();
複製代碼
public native String getStringOfC(String input);
複製代碼
那就變成了:數組
JNIEXPORT jstring JNICALL Java_com_jerry_jnitest_JniTest_getStringOfC (JNIEnv *env, jobject jobj, jstring jstr){
}
複製代碼
這裏面jobject標示這個native方法是調用它的對象,第三個參數jstring就是java方法中String input這個參數。 從上文能夠看出,jxxxx的都會對應Java中的一種數據類型。函數
下面是Java的數據類型與JNI的數據類型的映射關係:post
Java數據類型 | Jni數據類型 | C數據類型 |
---|---|---|
基礎數據類型 | ||
void | void | void |
boolean | jboolean | unsigned char |
byte | jbyte | signed char |
char | jchar | char |
short | jshort | short |
int | jint | int |
long | jlong | __int64(long long) |
float | jfloat | float |
double | jdouble | double |
引用數據類型 | ||
String | jstring (jobject的別名) | struct _jobject* |
Object | jobject | struct _jobject* |
基本數據類型的數組 | ||
blooean[] | jbooleanArray 1. jbooleanArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
byte[] | jbyteArray 1. jbyteArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
char[] | jcharArray 1. jcharArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
short[] | jshortArray 1. jshortArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
int[] | jintArray 1. jintArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
long[] | jlongArray 1. jlongArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
float[] | jfloatArray 1. jfloatArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
double[] | jdoubleArray 1. jdoubleArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
引用數據類型數組 | ||
Object[] | jobjectArray 1. jobjectArray是jarray的別名 2. jarray又是jobject的別名 |
struct _jobject * |
JNI系列文章:this