簡體   English   中英

使用JNI一對一地將C ++對象傳遞給Java與設置對象參數

[英]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完成的任務將更加簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM