zoukankan      html  css  js  c++  java
  • 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中的 字符串,并修改。

  • 相关阅读:
    socket上传nsdictionary的json数据异常
    Eclipse中如何关联Javadoc
    《算法导论》读书笔记之第8章 线性时间排序
    《算法导论》读书笔记之第6章 堆排序
    《算法导论》读书笔记之第3章 函数的增长
    《算法导论》读书笔记之第2章 算法入门
    《算法导论》读书笔记之第7章 快速排序
    堆排序
    八皇后
    行指针的理解
  • 原文地址:https://www.cnblogs.com/yue31313/p/7449834.html
Copyright © 2011-2022 走看看