![](/img/trans.png)
[英]How to call a Java applet callback function from native C/C++ code using JNI.
[英]Using byte[] from Java to native (C++) code using JNI
我正在用Java開發Android,並用C ++編寫了一些本機部分(外部庫)。
我想將字節[]從托管(Java)應用程序傳遞到本機(C ++)庫:
// Declaration for the native method in Java
private native void someMethod(byte[] data);
在本機方面,我想使用字節數組作為另一個提供的本機函數的參數。
我已經讀過有關將數組數據轉換(復制)為兼容類型( GetByteArrayElements )的JNI方法,但是這給我留下了jbyte *類型,與我正在使用的庫不兼容(該庫定義了它自己的nByte類型,即無符號字符)。
在這種情況下最好的選擇是什么?
我應該堅持使用JNI描述的方法,並將jbyte數組類型轉換為適當的nByte數組嗎? 還有其他選擇嗎?
我應該堅持使用JNI描述的方法,並將
jbyte
數組類型轉換為適當的nByte
數組嗎?
是的,因為jbyte
和nByte
是不同的類型,所以這似乎是不觸發未定義行為的唯一可靠方法。 在實踐中,極有可能是大小nByte
是相同的jbyte
,所以你可以用重新演繹的指針獲得通過jbyte*
為nByte*
,但是這不是一個便攜式解決方案。
故事將有所不同,如果你的庫了int8_t
的<cstdint>
那么你就能夠重新詮釋的指針jbyte
為指針int8_t
沒有負面影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.