当前位置:   article > 正文

JNI常见类型传参_jni jobject 传参

jni jobject 传参

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

JNI常见的几种类型传参


提示:以下是本篇文章正文内容,下面案例可供参考

一、int类型传参

java中的int和c++中的int类型一致,可以直接使用。

JNIEXPORT jint JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api
        (JNIEnv *env, jobject obj, jint j_a, jint j_b){
    int a = (int)j_a;
    int b = (int)j_b;

    __android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI a= %d b= %d",a,b);
    return (jint)(a+b);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、boolean类型传参

JNIEXPORT jboolean JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api2
        (JNIEnv *env, jobject obj, jboolean jbool){
    bool arg_bool = (jbool == JNI_TRUE)? true: false;
    __android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI bool %s",
                        (arg_bool == true)? "true":"false");
    return (arg_bool == true)? JNI_TRUE:JNI_FALSE;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

三、String类型传参

JNIEXPORT jstring JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api3
        (JNIEnv *env, jobject obj, jstring str1, jstring str2)
{
    //java中string类,所以不能直接转成C++方式
    const char *c_str1 = NULL;
    const char *c_str2 = NULL;

    //如果填写false,则是直接指向存放字符的地址,如果填写ture,则重新拷贝复制一份。
    c_str1 = env->GetStringUTFChars(str1, 0);
    __android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI string1 %s", c_str1);
    //释放java传递过来的jstring里面的在堆上开辟的字符串空间
    env->ReleaseStringUTFChars(str1, c_str1);

    jboolean jb = JNI_FALSE;
    c_str2 = env->GetStringUTFChars(str2, &jb);
    __android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI string2 %s", c_str2);
    env->ReleaseStringUTFChars(str2, c_str2);
    
    jstring ret = env->NewStringUTF("Jni return String");
    return ret;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

四、数组类型传参

JNIEXPORT void JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api4
        (JNIEnv *env, jobject obj, jintArray jarray)
{
    //获取java中数组的首地址,填0是不拷贝
    jint *pia = env->GetIntArrayElements(jarray, 0);
    //得到数组长度
    jsize array_len = env->GetArrayLength(jarray);
    //使用 pia
    for (int i = 0; i <array_len ; ++i) {
        __android_log_print(ANDROID_LOG_ERROR, "TEST", "array[%d] %d", i, pia[i]);
    }
    //释放java中的数组,0为是否为拷贝
    env->ReleaseIntArrayElements(jarray,pia,0);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

总结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/992647
推荐阅读
相关标签
  

闽ICP备14008679号