Java JNI函数是否可能返回整数或布尔值?

Java JNI函数是否可能返回整数或布尔值?,java,android,c,java-native-interface,Java,Android,C,Java Native Interface,JAVA代码 boolean b = invokeNativeFunction(); int i = invokeNativeFunction2(); jboolean Java_com_any_dom_Eservice_invokeNativeFunction(JNIEnv* env, jobject obj) { bool bb = 0; ... return // how can return 'bb' at the end of the function? }

JAVA代码

boolean b = invokeNativeFunction();
int i = invokeNativeFunction2();
jboolean Java_com_any_dom_Eservice_invokeNativeFunction(JNIEnv* env, jobject obj) {
    bool bb = 0;
    ...
    return // how can return 'bb' at the end of the function?
}

jint Java_com_any_dom_Eservice_invokeNativeFunction2(JNIEnv* env, jobject obj) {
    int rr = 0;
    ...
    return // how can return 'rr' at the end of the function?
}
C代码

boolean b = invokeNativeFunction();
int i = invokeNativeFunction2();
jboolean Java_com_any_dom_Eservice_invokeNativeFunction(JNIEnv* env, jobject obj) {
    bool bb = 0;
    ...
    return // how can return 'bb' at the end of the function?
}

jint Java_com_any_dom_Eservice_invokeNativeFunction2(JNIEnv* env, jobject obj) {
    int rr = 0;
    ...
    return // how can return 'rr' at the end of the function?
}

JNI函数是否可能返回整数或布尔值?如果是,我怎么做?

我认为您的方法签名可能是错误的

如果您注意到以下几点:

1) 在方法周围添加了
JNIEXPORT
JNICALL
。。 2) to
j
要返回的参数类型

我认为您需要将您的int示例简化为:

JNIEXPORT jint JNICALL Java_com_any_dom_Eservice_invokeNativeFunction2(JNIEnv* env, jobject obj) {
    jint rr = 99;
    ...
    return rr;
}

为什么不做一些静态强制转换:

return static_cast<jboolean>(bb);

return static_cast<jint>(rr);

是的,直接返回值即可

JNIEXPORT jint JNICALL Java_com_example_demojni_Sample_intMethod(JNIEnv* env, jobject obj,
    jint value) {
    return value * value;
}

JNIEXPORT jboolean JNICALL Java_com_example_demojni_Sample_booleanMethod(JNIEnv* env,
    jobject obj, jboolean unsignedChar) {
    return !unsignedChar;
}
Java原语类型和本机类型reference之间存在映射关系