0

在我的测试中,我想从C调用Java并传递一个long类型参数,当我使用long类型时,在Java方法中,传入的参数无法正确获取,它总是4294967297。但是当我尝试使用int类型时,一切正常。有谁知道出了什么问题?

爪哇:

public static void test(long num) {
    Log.d("test", "xxxxxxxxxxx:%ld" + String.valueOf(num));
}

C:

void test_jni()
{
    long num = 5000;
    jclass theClass = (*currentJNIEnv)->FindClass(currentJNIEnv, "me/example/something/TestClass");
    if (NULL != theClass) {
        jmethodID mid = (*currentJNIEnv)->GetStaticMethodID(currentJNIEnv, theClass, "test", "(J)V");
        if (mid == 0) return;
        (*currentJNIEnv)->CallStaticVoidMethod(currentJNIEnv, theClass, mid, num);
    }
}
4

2 回答 2

6

long在 Java 中始终是 64 位整数类型,long在 C 中可能是 32 位整数类型(至少在 x86 32 位 linux 上)。所以他们是不同的。这就是你得到垃圾的原因。

在 C 中,使用jlong而不是long,它被定义为足够长的整数数据类型。

于 2013-09-14T12:42:24.237 回答
2

有一个 typedef "jlong​​" 来表示 Java long;使用它而不是“long”来声明参数。它的大小可能与系统上的 long 不同。

于 2013-09-14T12:47:48.243 回答