Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';t C函数是否将正确的参数传递给java?_Java_Android_C_Java Native Interface - Fatal编程技术网

为什么可以';t C函数是否将正确的参数传递给java?

为什么可以';t C函数是否将正确的参数传递给java?,java,android,c,java-native-interface,Java,Android,C,Java Native Interface,在我的测试中,我想从C调用Java并传递一个longtype参数,当我使用longtype时,在Java方法中,传递的参数无法正确获取,它总是4294967297。但是当我尝试使用inttype时,一切都正常了。有人知道怎么了吗 爪哇: C: Java中的long始终是64位整数类型,C中的long可能是32位整数类型(至少在x86 32位linux上)。所以他们是不同的。这就是为什么你会收到垃圾 在C语言中,使用jlong而不是long,后者被定义为足够长的整数数据类型。有一个typedef“

在我的测试中,我想从C调用Java并传递一个
long
type参数,当我使用
long
type时,在Java方法中,传递的参数无法正确获取,它总是4294967297。但是当我尝试使用
int
type时,一切都正常了。有人知道怎么了吗

爪哇:

C:


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

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

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

public static void test(long num) {
    Log.d("test", "xxxxxxxxxxx:%ld" + String.valueOf(num));
}
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);
    }
}