0

我在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 中的 String 和 C++ 中的 char*)的方法?

4

1 回答 1

0

它返回一个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] = '\0';
    env->ReleaseStringUTFChars(objStr, strPtr);
    return buffer;
}
于 2013-06-23T00:03:21.230 回答