我有一个带有以下签名的Java方法:
public static boolean someMethod(Activity activity, int param1, int param2)
如何在获得jmethodID
之后从C / C ++中调用它?我知道CallStaticBooleanMethodV
期待va_list
,但我该如何创建呢?
同样,CallStaticBooleanMethod
需要一个jvalue
数组,但我无法创建它,例如以下不起作用:
jvalue args[] = {activity, param1, param2};
答案 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>