1. 程式人生 > >jni.h標頭檔案詳解(一)

jni.h標頭檔案詳解(一)

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