[英]How to return char * aarr= new char[200] from C++ to Java using JNA
我是JNA的新手。 在我的一個應用程序中,我需要從c返回char * aarr = new char [200]到java。 我不明白該怎么做。 我的c ++函數的返回類型應該是什么? 我應該如何聲明我的java方法來恢復char數組? 還有其他方法,例如在c ++中通過引用傳遞變量以獲取c ++的char []值嗎?
如果要從本機代碼返回緩沖區,則需要使用Pointer
並使用各種指針數據訪問方法來獲取/設置數據(例如, Pointer.getByteArray()
和Pointer.setByteArray()
)。 請注意,如果數據是通過本機代碼分配的,則必須提供某種處置內存的方式,因此您需要將指針保留在本機代碼中以備后用,或者從Java(作為Pointer
)傳遞回去。這樣您的C ++可以執行適當的delete[]
操作。
如果您可以從Java端分配緩沖區(如果Java端需要廣泛地處理數據,則建議使用),如果數據是長壽命的,請使用直接ByteBuffer
或Memory
如果本機代碼僅需要使用原始字節數組,則可以使用原始字節數組在本地通話期間訪問它。
JNA文檔明確指出本機char
映射到Java byte
。
還要記住,Java只有帶符號的值,因此您需要將Java byte
值(可能為負)轉換為較大的類型( short
或int
)並屏蔽掉高位,例如
int data = (int)byteValue & 0xFF;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.