JNI中有3种方法 CallObjectMethod CallObjectMethodV CallObjectMethodA 那么这些方法的区别是什么?
jobject (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
jobject (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);
jobject (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
答案 0 :(得分:4)
唯一的区别是java参数的传递方式。 Docs解释得非常好:
调用< type>方法例程
程序员放置所有的参数 紧接在methodID参数之后传递给方法。 CallMethod例程接受这些参数并传递它们 程序员希望调用的Java方法。
调用< type> MethodA Routines
程序员将所有参数放在 紧跟在jvalues的args数组中的方法 methodID参数。 CallMethodA例程接受参数 在这个数组中,反过来,将它们传递给Java方法 程序员希望调用。
调用< type> MethodV Routines
程序员将所有参数放在 紧随其后的类型为va_list的args参数中的方法 methodID参数。 CallMethodV例程接受 参数,反过来,将它们传递给Java方法 程序员希望调用。