JNI详解
来源:互联网 发布:飞翔流量软件 编辑:程序博客网 时间:2024/06/06 12:35
Java Native Interface,(JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他编程语言编写的代码相集成。在这里主要就是Java和C++的交互。
便可以得到一个.h文件:
#include
#ifndef _Included_com_test_Hello
#define _Included_com_test_Hello
#ifdef __cplusplus
#endif
JNIEXPORT void JNICALL Java_com_test_Hello_loginSuccessNative (JNIEnv *, jclass, jstring);
JNIEXPORT void JNICALL Java_com_test_setStateNative (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
}
}//系统会自己判断后缀。
2:在C++中调用java方法。
C++中调用java会比较麻烦一些,因为需要在C++中获取java的运行环境,并寻找我们要用的类和方法。首先我们需要了解几个概念:
JavaVM:这个代表java的虚拟机。所有的工作都是从获取虚拟机的接口开始的,如何获取这个接口呢?我们之前导入C的组件时调用了:
调用该方法时,java会先调用该组件的JNI_OnLoad()函数.其用途有二:
一是:告诉java VM此C组件使用那一个JNI版本。如果你没有提供JNI_OnLoad()函数,VM会默认使用最老的JNI 1.1版本。由于新版的JNI做了许多扩充,如果需要使用JNI的新版功能,例如JNI 1.4的java.nio.ByteBuffer,就必须藉由JNI_OnLoad()函数来告知VM。
二是:由于VM执行到System.loadLibrary()函数时,就会立即先呼叫JNI_OnLoad(),所以C组件的开发者可以藉由JNI_OnLoad()来进行C组件内的初期值之设定,也就是获取JavaVM接口。
如:
jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
}
有了上面的准备,下面我们就可以开始调用java的东西了:
一:获取对象的类id
我们只要知道类的名字就可以通过JNIEnv来获取classid
jclass classID = pEnv->FindClass(className);
二:获取要调用的方法id,包括静态和普通方法。
三:调用方法,同样包括静态和普通。
附:函数属性签名规则:
函数签名是一个字符串:"(M)N",括号中的内容是函数的参数类型,括号后面表示函数的返回值。
字符
V
Z
I
J
D
F
B
C
S
数组则以”["开始,用两个字符表示
[I
[F
[B
[C
[S
[D
[J
[Z
- JNI详解
- jni详解
- jni 详解
- JNI 详解
- JNI详解
- jni 详解
- JNI详解
- Jni详解
- JNI : Java Glossary --- JNI详解
- 【JNI】javah命令详解
- android JNI 示例详解
- JNI机制详解
- JNI数据类型的详解
- andorid JNI 入门详解
- JAVA JNI 例子 详解
- jni接口详解
- jni参数详解
- JNI数据类型的详解
- 黑马程序员****C语言基础****控制语句:循环
- FragmentTabHost的应用
- 网站数据备份
- WPF:XAML概述
- <学习笔记>CAS—修改默认登录页
- JNI详解
- shell截取字符串的方法
- awk 调用方式
- 使用截图方式将Excel导出为PNG图片的不可行性
- 求解决一个单链表插入排序的问题
- Java抽象类继承实体类
- Sublime Text3(mac)一些插件和快捷键
- ubuntu搜狗输入法安装
- 微信平台公众号推送文章撰写建议