本地方法调用3
继续本地调用的相关知识。前面已经讲过了关于java如何调用下面的相关知识,包括如何适配变量,jni调用的方法规范,以及一些jni方法调用的注意事项等等。
根据前面的介绍,我们可以发现,调用的过程,如果真的使用起来,并没有很顺手,因为仅仅只有参数的向下传递是绝对不够的。我们不仅要下层的代码访问上层的,还要来回调用彼此之间的方法,这样做才够cool嘛。而且才能灵活满足各种需求。就像佛经所说:能进能退,乃真正法器(形容能进能退,进退有度,赵云式的霸气),有木有?
那先来介绍下访问实例域吧。在java程序中,有很多方法,会使用到类中的全局变量,比如下面的代码:
JNIEXPORT void JNICALL Java_Employee_raiseSalary(JNIEnv* env, jobject this_obj, jdouble byPercent){ jclass class_Employee = (*env)->GetObjectClass(env, this_obj); jfieldID id_salary = (*env)->GetFiledID(env, class_Employee, "salary", "D"); jdouble salary = (*env)->getDoubleField(env, this_obj, id_salary); salary += 1 + byPercent; (*env)->SetDoubleField(env, this_obj, id_salary, salary);}