• 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  
  • 相关阅读:
    C#实现断点续传
    记住密码"功能的正确设计
    异常处理的性能开销
    asp.net提高程序性能的技巧(一)
    C#创建文件夹
    一个商人应遵守的22条规矩
    列不属于表--可能出现的问题总结
    存储过程无法得到返回型参数
    通用存储过程(增、删、改、查询分页)
    Mac下使用Charles抓包https接口
  • 原文地址:https://www.cnblogs.com/xiaorenwu702/p/5801909.html
Copyright © 2020-2023  润新知