JNI学习

来源:互联网 发布:oa系统 java php 编辑:程序博客网 时间:2024/05/29 07:55

1、JNI概述

JNI机制。

Java Native Interface 的缩写,实现了Java调用其他语言(如C/C++)的功能。

通过这种技术可以:

1)Java调用Native语言(C/C++)的函数

2)Native程序(C/C++)的函数可以调用Java层的函数

2、JNI的语法规则

1)将Java语言的数据类型转换成C/C++语言函数或方法。

Java 类型本地 C 类型

实际表示的 C 类型
(Win32)
说明booleanjbooleanunsigned char无符号,8 位bytejbytesigned char有符号,8 位charjcharunsigned short无符号,16 位shortjshortshort有符号,16 位intjintlong有符号,32 位longjlong__int64有符号,64 位floatjfloatfloat32 位doublejdoubledouble64 位voidvoidN/AN/A

2)将Java语言的方法调用,转换为调用底层语言函数或方法。

函数签名。

具体的对应关系见下面两张图:

  

数组则以”["开始,用两个字符表示


2)函数对应关系的前面

项目说明Java函数格式返回值  func(参数1,参数2,参数3)函数签名格式(参数1参数2参数3)返回值注意1、函数名,在JNI中没有体现出来
2、参数列表相互挨着,中间没有逗号,没有空格,返回值后面没有分号
3、返回值出现在()后面
4、如果参数是引用类型,那么参数应该为:

1、boolean isLenOn(void)

()Z

2、void setLedOn(int lenNo)

(I)

3、String substr(String str, int idx, int count);

(Ljava/lang/String;II)Ljava/lang/String


3、JNI的实现步骤

Java代码加载JNI的库

1)如果Java要调用native函数,就必须通过一个位于JNI层的动态库来实现。

2)通常的做法是在类的static语句中加载,调用System.loadlibrary的方法加载动态库。

3)Native函数需要在Java中用关键字native的形式声明

注册JNI函数签名

1)静态注册

2)动态注册