この質問を検索していくつかの回答を見つけましたが、私が探しているものが見つかりませんでした。 C++からJNIを使用してJavaを呼び出し、Javaオブジェクトのフィールドを1つずつ設定します。以下のような何か:JNIを使用してC++オブジェクトをJavaとセットオブジェクトパラメータを1つずつ渡します
jobject jSomeObject = (jobject) JVM_ENV->CallObjectMethod(myObj, getObjMethodID, "");
JVM_ENV->CallVoidMethod(jSomeObject , setMethodID1, SomeIntVal);
JVM_ENV->CallVoidMethod(jSomeObject , setMethodID2, SomeStringVal);
jSomeObject内のすべてのパラメータは、このように一つずつ設定されています。そして、あなたは高価なJNIコールが複数存在することがわかります。私が考えているのは、ネイティブ環境ですべてのパラメータを設定し、複数のJNI呼び出しを避けるためにオブジェクトを1回だけ送信する方法がある場合です。 投稿の中には、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);
myObj :: getObjMethodIDはファクトリですが、パラメータを1つずつ設定できますが、1つは設定できません。私は1つにすべてのパラメータを渡すことはできませんので、それらの数十がある可能性があります。 自分の投稿を編集して、私が探しているものを表示しました。ネイティブ側にオブジェクトを作成し、そのオブジェクトをJava側に設定します。 – nav