韩梦飞沙  韩亚飞  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++ 相互调用的更多相关文章

  1. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  2. java 与 R 相互调用

    https://www.r-project.org/ http://cos.name/2013/08/r-rjava-java/ http://blog.csdn.net/hwssg/article/ ...

  3. 两个Java项目之间相互调用

    转自:http://dysfzhoulong.iteye.com/blog/1008747 一个项目A另一个项目B:(项目A和项目B都是Java写的项目) 在A项目中怎么调用B项目中的类和方法 有两种 ...

  4. 二、java 与 scala相互调用

    介绍:scala 是简化的java,运行于jvm的脚步语言.Java和scala通过各自编译器编译过都是jvm能解析class文件.本文介绍java和scala如何互调  scala的源代码文件是以. ...

  5. JAVA与.NET的相互调用——通过Web服务实现相互调用

    JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...

  6. Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

    IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...

  7. java JNI 的实现(2)-java和C/C++的相互调用.

    目录 概述 一,java代码 二,稍微注意通过javah生成的'C/C++'.h头文件和源java代码的关系 三,在C/C++中实现java的native方法(完整C/C++) 1,修改age,即Ja ...

  8. JAVA和C/C++之间的相互调用。

    在一些Android应用的开发中,需要通过JNI和 Android NDK工具实现JAVA和C/C++之间的相互调用. Java Native Interface (JNI)标准是java平台的一部分 ...

  9. Android 通过 JNI 访问 Java 字段和方法调用

    在前面的两篇文章中,介绍了 Android 通过 JNI 进行基础类型.字符串和数组的相关操作,并描述了 Java 和 Native 在类型和签名之间的转换关系. 有了之前那些基础,就可以实现 Jav ...

随机推荐

  1. 说说asp.net中的异常处理和日志追踪

    关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了.通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common ...

  2. 关于Cookie跨域的问题研究

    Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态.但是当你的站点有一个以上的域名时就会出现问题了.在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名 ...

  3. python并发编程之进程、线程、协程的调度原理(六)

    进程.线程和协程的调度和运行原理总结. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asynci ...

  4. WebBrowser中运行js

    HtmlElement script = wf.WebBrowser.Document.CreateElement("script"); script.SetAttribute(& ...

  5. mac 上使用octave的plot错误的解决办法

    在mac10.10上使用octave的时候,键入 plot(x, y)的时候会出现如下错误: ^ line : unknown or ambiguous terminal type; type jus ...

  6. Oracle中的dual

    简介,摘自百度百科: Oracle提供的最小的表,不论进行何种操作(不要删除记录),它都只有一条记录——'X'. 例如:执行select * from dual,里面只有一条记录:执行insert i ...

  7. java基础14 多态(及关键字:instanceof)

    面向对象的三大特征: 1.封装   (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承   ...

  8. java基础12 抽象类(及关键字:abstract)

    抽象类:abstract 1.应用的场景 我们描述一类事物时,存在着某种行为,但这种行为目前不具体,那么我们就可以抽取这种行为的声明,但是不去实现这种行为,我们就需要使用抽象类. 2.抽象的好处 强制 ...

  9. deep learning 资源汇总

    不定时更新..... 首先是吴老爷子在优酷的视频,可惜外音太大了:http://list.youku.com/albumlist/show?id=21508721&ascending=1&am ...

  10. DroidParts 中文系列教程(基于官方教程)

    DroidParts中文系列教程(基于官方教程) (一)DroidParts框架概况 2014年4月18日星期五 11:36 他是一个精心构造的安卓框架,包括下面这些基本功能 DI依赖注入,可以注入V ...