簡體   English   中英

通過 JNI 在 C 和 Java 之間傳遞指針

[英]Passing pointers between C and Java through JNI

I've been storing c pointers in Java through JNI by following the advice of @tulskiy in this post Passing pointers between C and Java through JNI

訣竅是將指針轉換為 jlong。 所以從 c 我有return (jlong) ptr;

我要返回一個 jlong(總是 64 位),因為我希望我的代碼在 64 位和 32 位系統上都可以工作。 64位計算機上64位指針的memory中的大小為64,因此在32位計算機上,memory中的指針大小為32位。

問題是在 32 位機器上我收到編譯器警告說“從不同大小的指針轉換為 integer”。 如果我有return (jlong) (int32_t) ptr;警告就會消失但是,此代碼不適用於 64 位機器。

我想讓我的代碼在沒有警告的情況下編譯,這樣如果有合法的警告,我會看到它。 有人有想法么?

謝謝,本

C 中有各種方便的 integer 類型。 您想要的可能是 intptr_t 或 uintptr_t:

return (jlong)(intptr_t) ptr;

區別?

  • intptr_tjlong 並返回保證工作,只要jlong 足夠大(你隱含地假設它是無論如何)。
  • uinttptr_tjlong 並返回可避免符號擴展,但如果uintptr_t太大而無法放入jlong 則為未定義行為(但所有“理智”架構/編譯器僅使用二進制補碼算法)

嘗試使用 intptr_t 進行強制轉換(無論平台容量如何,都存儲一個指針)。

暫無
暫無

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

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