jni.h头文件详解一

1.jni.h头文件路径:

  /usr/lib/jvm/jdk_1.6.0_43/include/jni.h

2.jni.h头文件组成分析图:

 

 

3.下面通过上图进行分析讲解jni.h头文件.

  一. jni规范中定义的基本数据类型.

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #define JNIEXPORT  
  2. #define JNIIMPORT  
  3. #define JNICALL  
  4.   
  5. typedef int              jint;  
  6. #ifdef _LP64 /* 64-bit Solaris */  
  7. typedef long             jlong;  
  8. #else  
  9. typedef long long        jlong;  
  10. #endif  
  11. typedef signed char    jbyte;  
  12. typedef unsigned char    jboolean;  
  13. typedef unsigned short   jchar;  
  14. typedef short       jshort;  
  15. typedef float           jfloat;  
  16. typedef double          jdouble;  
  17. typedef jint             jsize;</span>  

 

 

4.jni标准定义的数组类型。

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. struct _jobject;  
  2. typedef struct _jobject *jobject;  
  3. typedef jobject jclass;  
  4. typedef jobject jthrowable;  
  5. typedef jobject jstring;  
  6. typedef jobject jarray;  
  7. typedef jarray jbooleanArray;  
  8. typedef jarray jbyteArray;  
  9. typedef jarray jcharArray;  
  10. typedef jarray jshortArray;  
  11. typedef jarray jintArray;  
  12. typedef jarray jlongArray;  
  13. typedef jarray jfloatArray;  
  14. typedef jarray jdoubleArray;  
  15. typedef jarray jobjectArray;  

 

 

5.方法签名时用到的公共体类型。

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. typedef union jvalue {      
  2.     jboolean z;  
  3.     jbyte    b;  
  4.     jchar    c;  
  5.     jshort   s;  
  6.     jint     i;  
  7.     jlong    j;  
  8.     jfloat   f;  
  9.     jdouble  d;  
  10.     jobject  l;  
  11. } jvalue;</span>  

 

 

6.属性Id的定义。

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. struct _jfieldID;  
  2. typedef struct _jfieldID *jfieldID;   //字段ID类型的  

 

 

7.方法Id的定义。

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. struct _jmethodID;  
  2. typedef struct _jmethodID *jmethodID; //方法ID类型的定义。  

 

 

8.几种不同类型引用的定义。

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Return values from jobjectRefType  
  2. typedef enum _jobjectType {  
  3.      JNIInvalidRefType    = 0,  
  4.      JNILocalRefType      = 1,  
  5.      JNIGlobalRefType     = 2,  
  6.      JNIWeakGlobalRefType = 3  
  7. } jobjectRefType;</span>  

 

 

9.错误类型定义。

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * jboolean constants 
  3.  */  
  4. #define JNI_FALSE 0  
  5. #define JNI_TRUE 1  
  6.   
  7. /* 
  8.  * possible return values for JNI functions. 
  9.  */  
  10.   
  11. #define JNI_OK           0                 /* success */  
  12. #define JNI_ERR          (-1)              /* unknown error */  
  13. #define JNI_EDETACHED    (-2)              /* thread detached from the VM */  
  14. #define JNI_EVERSION     (-3)              /* JNI version error */  
  15. #define JNI_ENOMEM       (-4)              /* not enough memory */  
  16. #define JNI_EEXIST       (-5)              /* VM already created */  
  17. #define JNI_EINVAL       (-6)              /* invalid arguments */  
  18.   
  19. /* 
  20.  * used in ReleaseScalarArrayElements 
  21.  */  
  22.   
  23. #define JNI_COMMIT 1  
  24. #define JNI_ABORT 2  

 

 

10 .JNI Native Method Interface.(java本地方法接口定义)

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. struct JNINativeInterface_;  
  2. struct JNIEnv_;  
  3. #ifdef __cplusplus     
  4. typedef JNIEnv_ JNIEnv;  
  5. #else  
  6. typedef const struct JNINativeInterface_ *JNIEnv;       //我们使用的是这个定义.  
  7. #endif  

 

 

11. JNI Invocation Interface. (java虚拟机接口)

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
    1. struct JNIInvokeInterface_;  
    2. struct JavaVM_;  
    3. #ifdef __cplusplus  
    4. typedef JavaVM_ JavaVM;  
    5. #else  
    6. typedef const struct JNIInvokeInterface_ *JavaVM;  
    7. #endif  
posted @ 2016-08-24 10:35  小人物702  阅读(3202)  评论(0编辑  收藏  举报