簡體   English   中英

將JNI Object作為參考指針訪問Java層

[英]Access JNI Object to Java layer as reference pointer

我正在編寫一個應用程序,我與JNI調用有很多關系,每次我必須執行getter()調用來訪問變量值。 相反,可以在Java Layer上訪問JNI對象的Object引用 ,因此只需通過變量名稱(例如obj.name而不是obj.getName() )獲取更新的變量值。

我已經檢查了這個這個 ,但沒有辦法如何在java層將地址轉換為Object。

編輯我想從JNI的Java層以這種方式訪問​​Obj。

private native CustomObj getCPPCustomObjectPointer();

這里有任何建議。

是否可以在Java Layer上訪問JNI對象的Object引用?

是的你可以。 但是,您無法使用它來訪問其屬性。 您只能將其地址保存為long值。

如果您願意這樣做,您應該在堆內存中創建C ++對象並將其地址作為long數字返回。

MyClass *obj = new MyClass();
return (long) obj;

在Java端,你可以說地址保存為一個long ,無論你想數。 由於已在堆內存中創建了對象,因此它們在JNI調用之間保持有效。

此外,您必須將它們作為一個long數字傳遞給以后的JNI調用,然后您應該將它們轉換為C ++方面的MyClass *

MyClass *obj = (MyClass *)thatLongNumber;
obj->someProperty; // Access its properties and methods via -> operator

您想要從Java端保留對C ++對象的引用嗎? 你不能

用於表示和訪問對象/原語的那些實現(C / Java)是完全不同的。 這就是為什么當你從一種數據類型轉換到另一種數據類型時,有如此多的mambo jambo函數

暫無
暫無

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

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