亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

訪問 JNA 指針的對等值

訪問 JNA 指針的對等值

智慧大石 2021-07-06 17:01:59
我正在使用JNA. 本Pointer類代表了本地指針。訪問似乎是peer成員變量的指針地址似乎很常見。但是,他們確保您無法查詢它。為什么?如果您想使用它,推薦的獲取方式是什么?我寫了以下“黑客”:public static long getBaseAddress(Pointer pointer){    String stringPointer = pointer.toString();    String[] splitStringPointer = stringPointer.split("@");    int expectedSplitLength = 2;    if (splitStringPointer.length != expectedSplitLength)    {        throw new IllegalStateException("Expected a length of "                + expectedSplitLength + " but got " + splitStringPointer.length);    }    String hexadecimalAddress = splitStringPointer[1].substring("0x".length());    return parseLong(hexadecimalAddress, 16);}但是除了濫用這種toString()獲取地址的方法,難道就沒有別的辦法了嗎?我想使用Reflection比上述方法更少的方法,因為它也很脆弱。
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

雖然子類化(如在 technomage 的回答中)有效,但這是不必要的。 Pointer.nativeValue(p)會給你p的同行。

正如我對另一個答案的評論一樣,“除非您知道自己在做什么,否則不要使用它。” JNA 中的任何內容通常都不需要它。只有當您確實出于其他目的需要內存地址時,對等值才真正相關。您可以迭代從 0 開始的偏移量以完成習語,例如您在評論中發布的鏈接中的代碼示例。

Pointer 的 getter 都接受一個offset參數,您也可以簡單地使用 返回一個指向原始對等值偏移量的指針share()。


查看完整回答
反對 回復 2021-07-14
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

創建一個子類,Pointer你可以對受保護的字段做任何你想做的事情。

通常,您不應直接訪問該值,將字段設置為 protected 的目的正是為了防止無意中犯此類錯誤。


查看完整回答
反對 回復 2021-07-14
  • 2 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號