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,事情会正常工作。
有人可以解释为什么会这样吗?谢谢。
您的本地声明不正确。静态方法的第二个参数是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)