JNI方法CallObjectMethod,CallObjectMethodV和CallObjectMethodA的区别是什么?

时间:2016-08-29 09:50:49

标签: java c++ java-native-interface

JNI中有3种方法 CallObjectMethod CallObjectMethodV CallObjectMethodA 那么这些方法的区别是什么?

jobject     (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
jobject     (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);
jobject     (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);

1 个答案:

答案 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方法   程序员希望调用。