• 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中的 字符串,并修改。

  • 相关阅读:
    C++ SDL2事件处理
    C++ SDL_Image配置
    C++ TinyXML库读写XML
    C++ libcurl库使用
    C++ 配置使用libcurl
    C++ 正则使用
    C++使用cJSON
    Vue通过状态为页面切换添加loading、为ajax加载添加loading
    移动端真机调试工具--DebugGap (VIDE)
    new Date(str)返回的时间结果在移动端比PC端快了8小时
  • 原文地址:https://www.cnblogs.com/yue31313/p/7449834.html
Copyright © 2020-2023  润新知