什么调用方法返回char *(Java中的String和C ++中的char *)?

时间:2013-06-22 01:16:00

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

我有像Java一样的功能

public boolean getIsIn();
public String getName();

在c ++中我有像

这样的包装函数
 bool gPGIsIn(){
    JNIEnv* env = s3eEdkJNIGetEnv();
    return (bool)env->CallBooleanMethod(g_Obj, g_s3eGPGIsIn);
}
 char* gPGGetName(){
    JNIEnv* env = s3eEdkJNIGetEnv();
    // below is a problem, what to call
    //return (char*)env->CallWahtMethod(g_Obj, g_s3eGPGGetName);
}

其中

static jmethodID g_s3eGPGIsIn = env->GetMethodID(cls, "getIsIn", "()Z");
static jmethodID g_s3eGPGGetName = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");

在gPGGetName中调用标记为类似问题的内容来调用返回char *的方法(Java中的字符串和C ++中的char *)?

1 个答案:

答案 0 :(得分:0)

它会返回String个对象,您可以使用JNI string functions将该字符串转换为char*

char* gPGGetName() {
    jobject objStr = env->CallObjectMethod(g_Obj, g_s3eGPGGetName);
    jsize len = env->GetStringUTFLength(objStr);
    const char* strPtr = env->GetStringUTFChars(objStr, 0);
    char* buffer = (char*)malloc((len + 1) * sizeof(char));
    memcpy(buffer, strPtr, len);
    buffer[len] = '\0';
    env->ReleaseStringUTFChars(objStr, strPtr);
    return buffer;
}