将对象传递给 Java C++与使用 JNI 逐个设置对象参数
Pass C++ object to Java vs set object parameters one by one using JNI
我已经搜索了这个问题并找到了一些答案,但并没有真正找到我想要的东西。 我使用 C++ 中的 JNI 调用 Java,并逐个设置 Java 对象的字段。如下所示:
jobject jSomeObject = (jobject) JVM_ENV->CallObjectMethod(myObj, getObjMethodID, "");
JVM_ENV->CallVoidMethod(jSomeObject , setMethodID1, SomeIntVal);
JVM_ENV->CallVoidMethod(jSomeObject , setMethodID2, SomeStringVal);
jSomeObject 中的所有参数都是像这样一一设置的。而且您会看到有多个 JNI 呼叫正在进行,这很昂贵。我在想的是,如果有一种方法可以在本机环境中设置所有参数并仅发送一次对象以避免多次 JNI 调用。 一些帖子说不可能将自定义对象传递给 JNI。我能做到吗?
编辑: 上面的调用更改为:
jobject jSomeObject = (jobject) JVM_ENV->CallObjectMethod(myObj, getObjMethodID, "");
someClass obj = new someClass();
obj.setMethod1(someInvVal);
obj.setMethod2(someStringVal); // so on...
JVM_ENV->CallVoidMethod(jSomeObject , setMethodID1, obj);
否:您只能调用方法和构造函数,并获取和设置在 Java 中定义的字段。
是的:您可以在 Java 中定义其他类和方法,这些类和方法将在一次调用中完成您需要的操作。例如,myObj:getObjMethodID
似乎是一种工厂方法。您可以添加一个方法重载,该方法重载采用要用来初始化所创建对象的所有值。
一般来说,如果你能在Java中使事情变得强大,那么在JNI中完成的任务就会更简单。
相关文章:
- 使用 jni 将返回带有模板的对象的 Java 代码转换为 c++
- 如何调用传递给 JNI 'jobject' 的 Java 对象的子类/子类的方法
- 将对象传递给 Java C++与使用 JNI 逐个设置对象参数
- JNI 如何将 Java 对象数组传递给相同对象类型的 C++ 数组
- 如何将类对象传递给 jni 本机方法
- JNI返回Java对象,可以返回本地参考,还是必须是全局
- 将 JSON 对象作为参数在 JNI 中传递给 CPP,并在 CPP 中检索 JSON 对象的数据
- Android JNI:Java通过JNI调用C++类对象
- 在 JNI 中创建新对象
- 在创建新对象时,尝试将参数提供给JNI对象的构造函数时会出现错误
- 使用 JNI 从 Java 访问 C++ 对象数组
- JNI Java对象实例化期间的Segfault
- 通过其他线程通过JNI呼叫保存的Java对象
- 有没有人试图通过 JNI 将 protobuf 对象从 C++ 返回到 Java
- JNI:MAP jobject到本机C 对象
- JNI:正确管理Java对象的寿命
- JNI与共享对象有问题
- JNI:从C++调用JAVA方法,返回对象,引用和GC
- ReferenceTable溢出(jni-android),数组对象释放
- JNI/Android NDK-维护全局对象引用