如何调用返回char* (Java中的String和c++中的char*)的方法

What to call method which returns char* ( String in Java and char* in C++)?

本文关键字:中的 char c++ 方法 String Java 返回 调用 何调用      更新时间:2023-10-16

我在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*)的方法?

它返回一个String对象,您可以使用JNI字符串函数将该字符串转换为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] = '';
    env->ReleaseStringUTFChars(objStr, strPtr);
    return buffer;
}