• jni数据传递——会不断的更新,测试没有问题,再整理进来。


    工作中遇到了ndk编程,其实核心就是java和本地的数据交互。现把所有数据类型的传递写成demo。

    1,ini数组传递  我们实现传递8个数值过去,然后本地将八个数值放到数组,返回.

    java代码:

    public native int[] getMessage(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8);  //传递8个int类型的数值到本地方法

    本地代码:

    JNIEXPORT jintArray Java_com_example_testndk_MainActivity_getMessage(
            JNIEnv* env, jobject jobj, jint a1, jint a2, jint a3,jint a4
    ,jint a5,jint a6,jint a7,jint a8,jstring a9) {
        jintArray jArray = (*env)->NewIntArray(env, 8); //分配内存
        if (jArray == NULL) { //判断是否异常  分配内存失败
            printf("初始化变量失败!");
            return NULL;
        }
    
        int back[] = { a1, a2, a3, a4, a5, a6, a7, a8}; //赋值
        (*env)->SetIntArrayRegion(env, jArray, 0, 8, back);
        return jArray;
    
    };

    demo下载:http://pan.baidu.com/s/1dEWxKYl     

    2.java与本地方法的中文互传

    java代码:

    public native String getMessage(String s);  //参数传递的是中文

    本地方法:

    JNIEXPORT jstring Java_com_example_testndk_MainActivity_getMessage(JNIEnv* env,
            jobject jobj, jstring a9) {
         const char const *p_char = (*env)->GetStringUTFChars(env, a9, 0);  //jstring转换为char指针类型
    
        return (*env)->NewStringUTF(env, p_char);  //char指针类型转换为java的String返回
    
    };

    demo下载:http://pan.baidu.com/s/1kVAhjmv

  • 相关阅读:
    BZOJ 2724: [Violet 6]蒲公英
    codeforces Lightsabers (hard)
    BZOJ 3884: 上帝与集合的正确用法
    BZOJ 4809: 皇后
    python的变量类型(Day6)
    Python集合方法整理(Day9)
    基本运算符与流程控制(Day5)
    基本数据类型(Day4)
    第一个Python程序(Day3)
    操作系统(Day2.5)
  • 原文地址:https://www.cnblogs.com/yaxiaoke/p/5352853.html
Copyright © 2020-2023  润新知