jni java C/C++ 相互调用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
java 中 声明 一个 native 方法
用javah命令 生成 包含 native方法定义的 c++头文件
在 项目目录 下 打开命令行输入 javah hmfs.TestNative 就生成了对应的 头文件
创建c++工程,把刚才的头文件 复制过来。
创建c++文件, 编写相关代码。 注意 包含的头文件。 编译之后,会生成一个 dll 文件。
将dll文件路径 可以添加到 windows的 path环境变量中
然后java代码中
System.loadLibrary(“nativeCode”); //这个就是dll文件的名字
TestNative mTestNative = new TestNative ();
mTestNative.printText();
这样就成功调用了c++代码
=====
在我们创建的C++文件中,遵循了jni的一些规则。
JNIEnv 意思是 java环境。
通过 JNIEnv* 这个指针 就可以 调用java代码,创建对象,调用方法,获取属性。
JNIEnv 这个类中 有很多方法,比如 创建对象,创建字符串,创建数组,获得或设置字段,调用方法,查找类,获得对象类,获得父类 等。
jobject

jclass 表示 java中的 Class类。
JNIEnv中 有几个方法 与jclass相关。 查找类,获得对象类,获得父类。
FIndClass 会在 classpath环境变量下 寻找类。 传入完整类名。如:
jclass cls_string = env->FindClass("java/lang/String");
jni.h这个头文件中 定义了 jfieldID,jmethodID 代表 java端的字段和方法。
JNIEnv中 有 相关方法如:获得字段ID,获得方法ID。
如 env->GetMethodID(data_Clazz,"<int>","()V")
第一参数 是 jclass , 表明在哪个类中
第二个 是 表名 属性或者方法的 名称
第三个 是 指定 取得的属性 或者 方法参数的类型。
(I)V 是 int 类型。 (D) 是 double类型。



可以用 javap 命令来查看 java代码 对应的 签名 从而得到第三个参数。

获得 修改 java中的 字段。
c++调用 java中的方法

c++创建java 类对象


c++ 获得java中的 字符串,并修改。

jni java C/C++ 相互调用的更多相关文章
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- java 与 R 相互调用
https://www.r-project.org/ http://cos.name/2013/08/r-rjava-java/ http://blog.csdn.net/hwssg/article/ ...
- 两个Java项目之间相互调用
转自:http://dysfzhoulong.iteye.com/blog/1008747 一个项目A另一个项目B:(项目A和项目B都是Java写的项目) 在A项目中怎么调用B项目中的类和方法 有两种 ...
- 二、java 与 scala相互调用
介绍:scala 是简化的java,运行于jvm的脚步语言.Java和scala通过各自编译器编译过都是jvm能解析class文件.本文介绍java和scala如何互调 scala的源代码文件是以. ...
- JAVA与.NET的相互调用——通过Web服务实现相互调用
JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...
- Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式
IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...
- java JNI 的实现(2)-java和C/C++的相互调用.
目录 概述 一,java代码 二,稍微注意通过javah生成的'C/C++'.h头文件和源java代码的关系 三,在C/C++中实现java的native方法(完整C/C++) 1,修改age,即Ja ...
- JAVA和C/C++之间的相互调用。
在一些Android应用的开发中,需要通过JNI和 Android NDK工具实现JAVA和C/C++之间的相互调用. Java Native Interface (JNI)标准是java平台的一部分 ...
- Android 通过 JNI 访问 Java 字段和方法调用
在前面的两篇文章中,介绍了 Android 通过 JNI 进行基础类型.字符串和数组的相关操作,并描述了 Java 和 Native 在类型和签名之间的转换关系. 有了之前那些基础,就可以实现 Jav ...
随机推荐
- 前端开发进阶:推荐的 CSS 书写规范
写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里总结一个CSS书写规范.CSS书写顺序供大家参考,这些是参考了国外一些文章以及我的个人经 ...
- zabbix 监控服务器的TCP状态
本文介绍如何监控TCP的11种状态: 1.命令选择: ss or netstat netstat 在 Centos7上已经不再支持,ss 打印基于socket的统计信息,实际运行下来,ss的速度比ne ...
- NYOJ 228 士兵杀敌(五) (模拟)
{题目链接](http://acm.nyist.net/JudgeOnline/problem.php?pid=228) 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候 ...
- koa通过get请求获取参数
1.通过get方式请求获取参数的方式有两种 通过上下文获取 通过request获取 获得的格式有两种:query与querystring 注意:querystring为小写,驼峰格式会导致无法获取 2 ...
- Aragorn's Story 树链剖分+线段树 && 树链剖分+树状数组
Aragorn's Story 来源:http://www.fjutacm.com/Problem.jsp?pid=2710来源:http://acm.hdu.edu.cn/showproblem.p ...
- 模型稳定度指标PSI与IV
由于模型是以特定时期的样本所开发的,此模型是否适用于开发样本之外的族群,必须经过稳定性测试才能得知.稳定度指标(population stability index ,PSI)可衡量测试样本及模型开发 ...
- struts的标签
<%@ taglib uri="/struts-tags" prefix="s"%> <%@ taglib uri="/WEB-IN ...
- MySQL join 用法
select column1, column2 from TABLE1 join TABLE2 on 条件 # select * from table1 join table2; #两个表合成一个se ...
- Appium环境搭建说明(包括报错处理)
Appium环境搭建说明 一.环境配置 前提是windows系统已安装以下软件: 1.jdk 我装的是1.8.0 2.android-sdk 3.python,3.4-3.6 5.Node.js,v8 ...
- 设置网卡IP,还每次都挨个地址输入吗?批处理一下【转】
1.设置网卡ip,子网掩码和默认网关,注意修改网卡名称,跟本地连接汇总的网卡名称保持一直 netsh interface ip set address "以太网" static 1 ...