1.jni.h头文件路径:

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

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

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

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

  1. #define JNIEXPORT
  2. #define JNIIMPORT
  3. #define JNICALL
  4. typedef int              jint;
  5. #ifdef _LP64 /* 64-bit Solaris */
  6. typedef long             jlong;
  7. #else
  8. typedef long long        jlong;
  9. #endif
  10. typedef signed char    jbyte;
  11. typedef unsigned char    jboolean;
  12. typedef unsigned short   jchar;
  13. typedef short       jshort;
  14. typedef float           jfloat;
  15. typedef double          jdouble;
  16. typedef jint             jsize;</span>

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

  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.方法签名时用到的公共体类型。

  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的定义。

  1. struct _jfieldID;
  2. typedef struct _jfieldID *jfieldID;   //字段ID类型的

7.方法Id的定义。

  1. struct _jmethodID;
  2. typedef struct _jmethodID *jmethodID; //方法ID类型的定义。

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

  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.错误类型定义。

  1. /*
  2. * jboolean constants
  3. */
  4. #define JNI_FALSE 0
  5. #define JNI_TRUE 1
  6. /*
  7. * possible return values for JNI functions.
  8. */
  9. #define JNI_OK           0                 /* success */
  10. #define JNI_ERR          (-1)              /* unknown error */
  11. #define JNI_EDETACHED    (-2)              /* thread detached from the VM */
  12. #define JNI_EVERSION     (-3)              /* JNI version error */
  13. #define JNI_ENOMEM       (-4)              /* not enough memory */
  14. #define JNI_EEXIST       (-5)              /* VM already created */
  15. #define JNI_EINVAL       (-6)              /* invalid arguments */
  16. /*
  17. * used in ReleaseScalarArrayElements
  18. */
  19. #define JNI_COMMIT 1
  20. #define JNI_ABORT 2

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

  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虚拟机接口)

    1. struct JNIInvokeInterface_;
    2. struct JavaVM_;
    3. #ifdef __cplusplus
    4. typedef JavaVM_ JavaVM;
    5. #else
    6. typedef const struct JNIInvokeInterface_ *JavaVM;
    7. #endif

jni.h头文件详解一的更多相关文章

  1. jni.h头文件详解二

    作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...

  2. 【转】 jni.h头文件详解(二)

    原文网址:http://blog.csdn.net/shaohuazuo/article/details/42932813 作者:左少华 博客:http://blog.csdn.net/shaohua ...

  3. Linux 头文件详解

    概览: 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,Linux子目录中有10个,sys子目录中有5个. <a.out.h>:a.out头文件,定义了a. ...

  4. javascript —— HTTP头文件详解

    HTTP(超文本传输协议:HyperText Transfer Protocol)是浏览器和服务器通过internet进行相互通信的协议,也是网络上应用最为广泛的一种网络协议.HTTP规范由World ...

  5. http请求头、响应头文件详解

    HTTP Request Header 请求头   解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept-Charset 浏 ...

  6. Android JNI开发生成.h头文件问题(转)

    在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...

  7. Android JNI开发生成.h头文件问题

    在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...

  8. PE文件详解(六)

    这篇文章转载自小甲鱼的PE文件详解系列原文传送门 之前简单提了一下节表和数据目录表,那么他们有什么区别? 其实这些东西都是人为规定的,一个数据在文件中或者在内存中的位置基本是固定的,通过数据目录表进行 ...

  9. stdarg.h头文件源代码分析

    谈到C语言中可变参数函数的实现(参见C语言中可变参数函数实现原理),有一个头文件不得不谈,那就是stdarg.h 本文从minix源码中的stdarg.h头文件入手进行分析: #ifndef _STD ...

随机推荐

  1. LSJ_NHibernate第二章 ManagerPage

    前言: 项目为传统的三层架构,可以根据个人的需求进行拓展. 很多人都在质疑B层的作用,我认为B层才是核心,这个取决于业务的复杂度 项目的结构也比较的简单,我们先从最底层说起,ManagerPage,这 ...

  2. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  3. SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问

    sql server 2005: EXEC sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDEEXEC sp_c ...

  4. IOS_OC_百度地图与社交分享

    前奏. 知识点介绍 一. 导航和画线 地图画线 (理解) 二. 百度地图 集成百度地图 (掌握) POI检索 (掌握) 三. 社交分享 系统自带分享 (了解) 友盟分享 (掌握) SSO授权 (理解) ...

  5. Object-C日志记录

    在Object-C中,将日志信息输出到控制台是非常简单的.实际上NSLog()函数很像C语言里面的printf()函数,出了要用一个%@符号代表一个对象. NSLog(@"The curre ...

  6. javascript 内置对象 第17节

    <html> <head> <title>内置对象</title> </head> <body> <div>内置对象 ...

  7. 页面资源预加载(Link prefetch)功能加速你的页面加载速度

    有了浏览器缓存,为何还需要预加载? 用户可能是第一次访问网站,此时还无缓存 用户可能清空了缓存 缓存可能已经过期,资源将重新加载 用户访问的缓存文件可能不是最新的,需要重新加载 页面资源预加载/预读取 ...

  8. SGU 218.Unstable Systems

    题意: 有n(n<500)台机器,和500个程序.不同的程序在不同的机器上运行有着不同的不稳定度s[i][j].求最小的最大稳定度及其方案. Solution: 比较经典的二分图模型. 建图很简 ...

  9. Asp.net Mvc HTTP 404。

    asp.net mvc  设置完起始页的时候会出现以下Error 此错误的原因是在MVC中设置完起始页 会改变   的 值 从而使服务器找不到 相对应的路径   解决方案: 通过 路由设置,解决web ...

  10. js监听

    IE浏览器监听: function attachEvent(string eventFlag, function eventFunc) eventFlag: 事件名称,但要加上on,如onclick. ...