如何将jobject类“转换”为复杂的C ++类型?

时间:2012-09-27 14:03:56

标签: c++ java-native-interface

我有一个与C ++类匹配的Java类。 java类名为SDClass_JNI,C ++类名为SDClass。我将Java类作为jobject param传递给我的JNI方法。在那个JNI方法中,我希望然后将在我的JNI方法中作为参数传入的jobject转换为“匹配”C ++方法。 (例如SDClass_JNI - > SDCLass)。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想要从java类到相应的c ++类的隐式转换。

这是不可能的,你应该编写代码来处理编组过程。

类似的东西:

SNDClass toSND(JNIEnv *env, jobject obj) {

    SNDClass result;

    jclass cls = env->FindClass("com/.../SDClass_JNI");
    checkException(env);
    //TODO release jclass object (env->DeleteLocalRef(cls);)(maybe use some sort of scoped smart pointer )

    jmethodID mid = env->GetMethodID(mCls, "getField1", "()D");
    checkException(env);
    jdouble value = env->CallDoubleMethod(obj, mid);
    checkException(env);
    result.setField1(jdouble);
    .....
}

void checkException(JNIEnv *env)
{
    jthrowable exc = env->ExceptionOccurred();
    if (NULL == exc)
    {
        return;
    }
    //TODO decide how to handle
}