Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“我该怎么做?”;转换;复杂C++;类型? 我有一个与C++类相匹配的java类。java类被命名为“代码> SDCaseJNI/CUD>”C++类被称为“代码> SDClass < /代码>。我将Java类作为jobjectparam传递给我的JNI方法。在JNI方法中,我想将“作业JOB/作为JNI方法中的参数转换为“匹配”C++方法。(例如,SDClass\u JNI->SDClass)。我如何做到这一点?< p>如果我理解正确,你需要从java类到相应的C++类的隐式转换。_C++_Java Native Interface - Fatal编程技术网

“我该怎么做?”;转换;复杂C++;类型? 我有一个与C++类相匹配的java类。java类被命名为“代码> SDCaseJNI/CUD>”C++类被称为“代码> SDClass < /代码>。我将Java类作为jobjectparam传递给我的JNI方法。在JNI方法中,我想将“作业JOB/作为JNI方法中的参数转换为“匹配”C++方法。(例如,SDClass\u JNI->SDClass)。我如何做到这一点?< p>如果我理解正确,你需要从java类到相应的C++类的隐式转换。

“我该怎么做?”;转换;复杂C++;类型? 我有一个与C++类相匹配的java类。java类被命名为“代码> SDCaseJNI/CUD>”C++类被称为“代码> SDClass < /代码>。我将Java类作为jobjectparam传递给我的JNI方法。在JNI方法中,我想将“作业JOB/作为JNI方法中的参数转换为“匹配”C++方法。(例如,SDClass\u JNI->SDClass)。我如何做到这一点?< p>如果我理解正确,你需要从java类到相应的C++类的隐式转换。,c++,java-native-interface,C++,Java Native Interface,这是不可能的,您应该编写代码来处理封送处理过程 比如: 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 us

这是不可能的,您应该编写代码来处理封送处理过程

比如:

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
}

谢谢,马吕斯。然而,如果我不能转换,那么JNI有什么意义呢?我的C++代码中有C++对象,它们有C++对象作为PARAMs的方法。因此,我不能从JNI代码中调用那些C++方法,其中的参数是从JVM中传递的?这是一个更高级的库,但我只使用了JNI。关于目的,我们使用的是c/c++代码,在一般情况下,自动封送非常复杂。@Marius不做任何封送,它工作得很好!这有点像哈基什语,但重点是要表明这是可能的……省去麻烦并使用:它让一切变得简单:)