[英]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_t
到jlong
並返回保證工作,只要jlong
足夠大(你隱含地假設它是無論如何)。uinttptr_t
為jlong
並返回可避免符號擴展,但如果uintptr_t
太大而無法放入jlong
則為未定義行為(但所有“理智”架構/編譯器僅使用二進制補碼算法)嘗試使用 intptr_t 進行強制轉換(無論平台容量如何,都存儲一個指針)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.