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

Bil*_*son 3 java java-native-interface android

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

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

然后我用 JNI 的方式声明了它:

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

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

相反,如果第一个参数不是 a jint,比如 a jstring,事情会正常工作。

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

Ser*_*gio 5

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

爪哇:

public native static void test(int w, int h);
Run Code Online (Sandbox Code Playgroud)

本国的:

void testJni(JNIEnv* env, jclass clazz, jint w, jint h)
Run Code Online (Sandbox Code Playgroud)

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

爪哇:

public native void test(int w, int h);
Run Code Online (Sandbox Code Playgroud)

本国的:

void testJni(JNIEnv* env, jobject thiz, jint w, jint h)
Run Code Online (Sandbox Code Playgroud)