如何使用多个参数从C / C ++调用Java方法?

时间:2014-08-11 09:15:51

标签: android-ndk java-native-interface

我有一个带有以下签名的Java方法:

public static boolean someMethod(Activity activity, int param1, int param2)

如何在获得jmethodID之后从C / C ++中调用它?我知道CallStaticBooleanMethodV期待va_list,但我该如何创建呢?

同样,CallStaticBooleanMethod需要一个jvalue数组,但我无法创建它,例如以下不起作用:

jvalue args[] = {activity, param1, param2};

1 个答案:

答案 0 :(得分:2)

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html

  

CallStaticMethod例程CallStaticMethodA例程   CallStaticMethodV Routines NativeType   CallStaticMethod(JNIEnv * env,jclass clazz,jmethodID methodID,   ...);

     

NativeType CallStaticMethodA(JNIEnv * env,jclass clazz,   jmethodID methodID,jvalue * args);

     

NativeType CallStaticMethodV(JNIEnv * env,jclass clazz,   jmethodID methodID,va_list args);

对于您的功能,最简单的方法是使用第一个选项(CallStaticBooleanMethod)。您的参数只是附加在类指针和方法ID之后的函数调用中。

jobject * instancePtr = NULL;  //assigned to the 
                             //instance of your "Activity" class.
jint param1, param2;  //assign your integer values 
                      //appropriately( jint = int )
jboolean result = env->CallStaticBooleanMethod( myClass, methodID, instancePtr, param1, param2 );

如果您当前已经有一个变量参数列表(即您的函数被声明为CallStaticXXXMethodV)并且您希望转发它们,那么您只需要调用第三个函数(doStuff(...))。 / p>