我已经用这种方式声明了一个静态本机方法:
public native static void test(int w, int h);
然后我在JNI中宣布:
void testJni(JNIEnv* env, jint w, jint h)
奇怪的是,w
总是收到一个看起来像指针的值,似乎jclass / jobject被传递给第一个参数w
。
相反,如果第一个参数不是jint
,比如说jstring
,那么事情就会好起来。
有人可以解释为什么会这样吗?感谢。
答案 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)