“我该怎么做?”;转换;复杂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不做任何封送,它工作得很好!这有点像哈基什语,但重点是要表明这是可能的……省去麻烦并使用:它让一切变得简单:)