NDK,将原始数据从c ++传递给java

时间:2012-02-07 14:33:54

标签: android android-ndk java-native-interface

我有一个用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函数

...谢谢

2 个答案:

答案 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);
}