JNI常见类型传参

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


前言

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);

示例: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;
}

三、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;
}

四、数组类型传参

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);
}

总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值