jni.h標頭檔案詳解(一)
阿新 • • 發佈:2019-01-06
1.jni.h標頭檔案路徑:
/usr/lib/jvm/jdk_1.6.0_43/include/jni.h
2.jni.h標頭檔案組成分析圖:
3.下面通過上圖進行分析講解jni.h標頭檔案.
一. jni規範中定義的基本資料型別.
#define JNIEXPORT #define JNIIMPORT #define JNICALL typedef int jint; #ifdef _LP64 /* 64-bit Solaris */ typedef long jlong; #else typedef long long jlong; #endif typedef signed char jbyte; typedef unsigned char jboolean; typedef unsigned short jchar; typedef short jshort; typedef float jfloat; typedef double jdouble; typedef jint jsize;</span>
4.jni標準定義的陣列型別。
struct _jobject; typedef struct _jobject *jobject; typedef jobject jclass; typedef jobject jthrowable; typedef jobject jstring; typedef jobject jarray; typedef jarray jbooleanArray; typedef jarray jbyteArray; typedef jarray jcharArray; typedef jarray jshortArray; typedef jarray jintArray; typedef jarray jlongArray; typedef jarray jfloatArray; typedef jarray jdoubleArray; typedef jarray jobjectArray;
5.方法簽名時用到的公共體型別。
typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;</span>
6.屬性Id的定義。
struct _jfieldID;
typedef struct _jfieldID *jfieldID; //欄位ID型別的
7.方法Id的定義。
struct _jmethodID;
typedef struct _jmethodID *jmethodID; //方法ID型別的定義。
8.幾種不同型別引用的定義。
Return values from jobjectRefType
typedef enum _jobjectType {
JNIInvalidRefType = 0,
JNILocalRefType = 1,
JNIGlobalRefType = 2,
JNIWeakGlobalRefType = 3
} jobjectRefType;</span>
9.錯誤型別定義。
/*
* jboolean constants
*/
#define JNI_FALSE 0
#define JNI_TRUE 1
/*
* possible return values for JNI functions.
*/
#define JNI_OK 0 /* success */
#define JNI_ERR (-1) /* unknown error */
#define JNI_EDETACHED (-2) /* thread detached from the VM */
#define JNI_EVERSION (-3) /* JNI version error */
#define JNI_ENOMEM (-4) /* not enough memory */
#define JNI_EEXIST (-5) /* VM already created */
#define JNI_EINVAL (-6) /* invalid arguments */
/*
* used in ReleaseScalarArrayElements
*/
#define JNI_COMMIT 1
#define JNI_ABORT 2
10 .JNI Native Method Interface.(java本地方法介面定義)
struct JNINativeInterface_;
struct JNIEnv_;
#ifdef __cplusplus
typedef JNIEnv_ JNIEnv;
#else
typedef const struct JNINativeInterface_ *JNIEnv; //我們使用的是這個定義.
#endif
11. JNI Invocation Interface. (java虛擬機器介面)
struct JNIInvokeInterface_;
struct JavaVM_;
#ifdef __cplusplus
typedef JavaVM_ JavaVM;
#else
typedef const struct JNIInvokeInterface_ *JavaVM;
#endif