在我的测试中,我想从 C 调用 Java 并传递一个 long
类型的参数,当我使用 long
类型时,在 Java 方法中,传入的参数无法正确获取,它始终是 4294967297。但是当我尝试使用 int
类型时,一切正常。有人知道出了什么问题吗?
Java:
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);
}
}
最佳答案
Java 中的
long
始终是 64 位整数类型,C 中的 long
可能是 32 位整数类型(至少在 x86 32 位 linux 上)。所以他们是不同的。这就是你得到垃圾的原因。
在 C 中,使用 jlong
而不是 long
,它被定义为足够长的整数数据类型。
关于java - 为什么 C 函数不能将正确的参数传递给 java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801441/