- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JNI详解
J NI 详解
Java Native Interface,(JNI)是一个标准的 Java API,它支持将 Java 代码
与使用其他编程语言编写的代码相集成。在这里主要就是Java和C++的交互。
1:java调用C++:
首先在java文件中对将要调用的方法做本地声明,关键字为native。且只
需要声明,而不需要具体实现。如
public native void loginSuccessNative(String p_qqId);
public native static void setStateNative(int i);
然后我们需要在c++文件中实现这些方法,这些方法有特定的格式,我们可
以使用javah命令来帮助生成这些方法的声明
调用javac编译我们的java类,获得class文件,然后javahyourClassName
便可以得到一个.h文件:
#include
#ifndef _Included_com_test_Hello
#define _Included_com_test_Hello
#ifdef __cplusplus
extern C {
#endif
JNIEXPORTvoidJNICALLJava_com_test_Hello_loginSuccessNative (JNIEnv*,
jclass, jstring);
JNIEXPORT void JNICALL Java_com_test_setStateNative (JNIEnv *, jclass,
jint);
#ifdef __cplusplus
}
#endif
#endif
其实只要知道了这个格式,我们也可以自己手动来写。由于java直接回查
找cpp里的方法,所以.h文件我们也可以不用声明。
JNIEXPORT void JNICALL Java_com_test_setStateNative(JNIEnv *, jclass, jint
state)
{
gameState state;
}
最后我们需要将c++文件,编译成so然后加入java工程,并在java 中导入。
static {
System.loadLibrary(“test”);
}//系统会自己判断后缀。
2:在C++中调用java方法。
C++中调用java会比较麻烦一些,因为需要在C++中获取java 的运行环境,并寻找我们要
用的类和方法。首先我们需要了解几个概念:
JavaVM:这个代表java 的虚拟机。所有的工作都是从获取虚拟机的接口开始的,如何获取
这个接口呢?我们之前导入C 的组件时调用了:
System.loadLibrary(“test”);
调用该方法时,java会先调用该组件的JNI_OnLoad()函数.其用途有二:
一是:告诉java VM此C组件使用那一个JNI版本。如果你没有提供JNI_OnLoad()函数,
VM会默认使用最老的JNI 1.1版本。由于新版的JNI做了许多扩充,如果需要使用JNI的
新版功能,例如JNI1.4的java.nio.ByteBuffer,就必须藉由JNI_OnLoad()函数来告知VM。
二是:由于VM执行到System.loadLibrary()函数时,就会立即先呼叫JNI_OnLoad(),所以
C组件的开发者可以藉由JNI_OnLoad()来进行C组件内的初期值之设定,也就是获取JavaVM
接口。
如:
jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
JniHelper::setJavaVM(vm);//获取JavaVM接口
return JNI_VERSION_1_4;//告知java使用什么版本的VM
}
: 它
JNIEnv 代表Java环境。通过这个JNIEnv*指针,就可以对Java端的代
码进行操作。如,创建Java类得对象,调用Java对象的方法,获取Java对象
的属性等。通过之前获得的JavVM我们可以获取JNIEnv:
static bool getEnv(JNIEnv **env)
{
bool bRet false;
do
{
您可能关注的文档
- C语言实训报告2.pdf
- C语言实验内容1.pdf
- C语言实训报告3.pdf
- C语言实验题答案.pdf
- c语言报告2.pdf
- c语言报错翻译.pdf
- C语言教程(三):进制以及进制转换.pdf
- c语言实训3.pdf
- c语言程序学习模板.pdf
- c语言程序笔记.pdf
- 2024-2030年中国钢铁企业非钢行业前景展望与投资可行性报告 .pdf
- 2024-2030年中国钢骨架塑料复合管行业市场现状调查及发展趋向研判报告.pdf
- 2024-2030年中国钢铁中厚板行业市场全景调研及发展趋向研判报告.pdf
- 2024-2030年中国重金属捕捉剂行业市场供需态势及发展前景研判报告.pdf
- 2024-2030年中国金刚石拉丝模行业市场供需态势及发展趋向研判报告.pdf
- 2024-2030年中国钢丝编织胶管行业市场行情监测及发展前景研判报告.pdf
- 2024-2030年中国钢板仓工程行业市场行情监测及未来趋势研判报告.pdf
- 2024-2030年中国酵素行业竞争状况与消费趋势预测报告 .pdf
- 人教版八年级语文第一学期期末考试试题(含答案)(适用于山东).docx
- 2024-2030年中国重卡整体行业市场全景调研及未来趋势研判报告 .pdf
最近下载
- 物业保安军训标准--队列.doc
- 广东省中小学教育创新成果奖评奖申请表及申报说明.doc
- 环境影响评价报告公示:年产4亿平方米锂电池专用湿法隔膜和改性涂覆隔膜项目环评报告.doc VIP
- 兵器工业集团第十一届职业技能竞赛数控铣工理论试题库资料-下(多选、判断题汇总).pdf VIP
- 徐州工程学院2010届毕业生生源信息一览表.xls VIP
- 秃鸡散_千金卷二十_方剂加减变化汇总.doc
- 市政道路施工与质量验收规范.pdf
- 医院护理品管圈成果汇提高糖尿病住院患者口服降糖药的正确率完整版本PPT易修改.pptx
- 工程已完工补签施工合同模板.docx VIP
- 2024年新版员工安全生产应知应会手册.pptx
文档评论(0)