我正在尝试使用NDK。 假设我有这个java片段来调用本机函数:
private native void changerect(Rect);
Rect r=new Rect();
r.set(10,10,100,100);
changerect(Rect r);
然后,原生函数:
void changerect(JNIEnv *env, jobect this, jobject r)
{
jclass rectClass=(*env)->GetObjectClass(env,r);
jfieldID jid=(*env)->GetFieldID(env,rectClass,"left","I");
jint l=(*env)->GetIntField(env,rectClass,fid);
//now, change the left value
l+=20;
(*env)->SetIntField(env,rectClass,fid,l);
}
这编译好了,但是我得到一个例外,说左边的字段不是该类的一部分?
帮助,有人吗?
答案 0 :(得分:0)
您应该将Rect对象(在您的情况下为'r')传递给Get / SetIntField函数,即
jint l=(*env)->GetIntField(env,r,fid);
(*env)->SetIntField(env,r,fid,l);