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. C#高级

    程序集 程序集概念: 程序集是.net中的概念. .net中的dll与exe文件都是程序集.(exe与dll的区别(exe有程序主入口,可以执行,dll没有主入口,不可运行)) 程序集(Assembl ...

  2. C#中 字符串的处理

    3.字符串 1).字符串的不可变性 当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值. 当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁. 2).我 ...

  3. O-C相关05:方法的封装.

    前言:在 OC 中进行封装, 就是实现设置实例变量和获取实例变量数据的方法, 常常称为 setter 方法和 getter 方法. 或称为 get set 读写器. 1,setter 方法 sette ...

  4. 数据操作So easy-LINQ解析

    1.LINQ是什么? LINQ是Language Integrated Query的缩写,即“语言集成查询”的意思.LINQ的提出就是为了提供一种跨越各种数据源的统一的查询方式,它主要包含4个组件-- ...

  5. excel导入 导出 兼容各个版本服务器不装EXCEL也可以

    给出 demo源码: http://pan.baidu.com/s/1hqGMudY 提取码:pw4n首先要引用 NPOI.dll (可在网上下载!) //导入 public void OnSubmi ...

  6. nodejs-日常练习记录-使用express搭建static服务器.

    cd C:\wxg\test\node_demo\myapp nvmw use 0.12.1 node static.js var express = require('express'); var ...

  7. [工具]toolbox_graph基本操作

    toolbox_graph提供了对3D模型的一些操作.MATLAB代码源自:http://www.mathworks.com/matlabcentral/fileexchange/5355-toolb ...

  8. Inline functions

    Problems: (Page 372) There are two problems with the use of proprocessor macros in C++. The first is ...

  9. 【转】Nginx 服务器安装及配置文件详解

    1. 安装nginx 1.1 选择稳定版本 我们编译安装nginx来定制自己的模块,机器CentOS 6.2 x86_64.首先安装缺少的依赖包: # yum -y install gcc gcc-c ...

  10. Yii Swiftmailer 发送中文附件

    所用的是Yii2 的basic框架.它本身集成了邮件发送插件swiftmailer,发送邮件是很方便的,但是当发送的邮件带有中文名称的附件时,就出现了问题,邮件所带的附件显示名称错误.比如原名&quo ...