我有像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 *)?
答案 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;
}