如何通过JNI传递64个长整数?

时间:2017-03-05 14:38:35

标签: android android-ndk java-native-interface

我尝试传递1000,1000000(java)和(long long)c ++,它运行正常。但我试图通过这个号码549755813888,在jni这个数字显示为零。我不知道如何将它传递给原生部分。

JNIEXPORT jlong JNICALL myMethod(JNIEnv *env, jclass type,jlong mynum) {
    __android_log_print(ANDROID_LOG_VERBOSE, "SDK", "mynum %d", mynum);
    //Shows zero
return 0;

}

1 个答案:

答案 0 :(得分:0)

你的问题在细节上非常吝啬。但是因为549755813888是0x1000000000,所以看起来你正在调用一个使用jint而不是jlong​​的方法,或者沿着将long long截断为int的某个地方调用方法。你的代码应该是这样的:

jlong jLongValue = 549755813888LL;
env->CallObjectMethodV(obj, methodData->mid, jLongValue);

并确保被调用的方法实际上需要很长而不是int?