带有第一个jint参数的Android静态jni方法收到了错误的值

时间:2016-07-08 07:40:43

标签: java android java-native-interface

我已经用这种方式声明了一个静态本机方法:

public native static void test(int w, int h);

然后我在JNI中宣布:

void testJni(JNIEnv* env, jint w, jint h)

奇怪的是,w总是收到一个看起来像指针的值,似乎jclass / jobject被传递给第一个参数w

相反,如果第一个参数不是jint,比如说jstring,那么事情就会好起来。

有人可以解释为什么会这样吗?感谢。

1 个答案:

答案 0 :(得分:4)

您的原始声明不正确。静态方法的第二个参数是jclass,它对应于放置方法的java类。

爪哇:

public native static void test(int w, int h);

本机:

void testJni(JNIEnv* env, jclass clazz, jint w, jint h)

对于本机实例方法,第二个arg是jobject,它对应于java this

爪哇:

public native void test(int w, int h);

本机:

void testJni(JNIEnv* env, jobject thiz, jint w, jint h)