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;");

char* (Java では String および C++ では char*) を返すメソッドを呼び出すために、gPGGetName 内の問題のようにタグ付けされた行で何を呼び出すか?

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 に答える