我有一个用java编写的android项目,它使用ndk作为一些openGL的东西..
我有一个cpp函数可以调用它,从那里我想调用一个java函数
C ++:
JNIEXPORT void JNICALL
Java_com_qualcomm_QCARSamples_ImageTargets_ImageTargetsRenderer_renderFrame(JNIEnv* env, jobject obj)
{
jclass activityClass = env->GetObjectClass(obj);
// Do something
char* argToPass = "Some string";
jmethodID functionID = env->GetMethodID(activityClass,
"CallBack", "()V");
env->CallObjectMethod(obj, functionID, 0);
}
爪哇:
public void CallBack(string arg){
// Do sometihng
}
问题是如何将argToPass参数传递给java函数
...谢谢
答案 0 :(得分:1)
See here有关通过jni调用java方法的详细说明。
看起来你的方法签名是错误的。上面的链接很好地描述了如何确定方法签名。以下是您的GetMethodId调用应该是什么样的:
jmethodID functionID = env->GetMethodID(
activityClass,
"CallBack",
"(Ljava/lang/String;)V");
然后当你打电话给你的方法时,你会这样做:
env->CallVoidMethod(
obj,
functionID,
env->NewStringUTF(argToPass));
请注意,我使用了CallVoidMethod,因为java中的返回值是无效的。
答案 1 :(得分:0)
要创建可以传递或返回给Java的字符串,请使用NewStringUTF():
JNIEXPORT jstring JNICALL Java_com_something_or_other_makeString(JNIEnv *env, jobject obj)
{
char *myString = "This is a test";
return (*env)->NewStringUTF(env, myString);
}