簡體   English   中英

如何使用JNA從C ++將char * aarr = new char [200]返回Java

[英]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端需要廣泛地處理數據,則建議使用),如果數據是長壽命的,請使用直接ByteBufferMemory如果本機代碼僅需要使用原始字節數組,則可以使用原始字節數組在本地通話期間訪問它。

JNA文檔明確指出本機char映射到Java byte

還要記住,Java只有帶符號的值,因此您需要將Java byte值(可能為負)轉換為較大的類型( shortint )並屏蔽掉高位,例如

int data = (int)byteValue & 0xFF;

請嘗試使用指針類的 Pointer.getCharArray(long offset,int arraySize) 方法

我猜您正在打印的是通過默認編碼轉換為字符串的指針的任意存儲位置。

暫無
暫無

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

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