我是JNA的新手。在我的一个应用程序中,我需要从c返回 char * aarr = new char [200] 到java。我不明白该怎么做。我的c ++函数的返回类型应该是什么?我应该如何声明我的java方法来恢复char数组? 有没有其他方法,比如在c ++中通过引用传递变量来获取c ++的char []值?
答案 0 :(得分:1)
如果从本机代码返回缓冲区,则需要使用Pointer
并使用各种指针数据访问方法来获取/设置数据(例如Pointer.getByteArray()
和Pointer.setByteArray()
)。请注意,如果数据是由本机代码分配的,则必须提供一些处理内存的方法,因此您需要将指针保留在本机代码中以供以后处理,或者将其从Java传回(作为{{ 1}})以便您的C ++可以执行适当的Pointer
操作。
如果您可以从Java端分配缓冲区(如果Java方需要广泛操作数据,建议使用),如果数据是长期的,请使用直接delete[]
或ByteBuffer
,或者如果本机代码仅需要在本机调用期间访问它,则为原始字节数组。
JNA文档清楚地表明本机Memory
映射到Java char
。
另请注意,Java只有签名值,因此您需要将Java byte
值(可能为负值)转换为更大的类型(byte
或short
并掩盖高位,例如
int
答案 1 :(得分:0)
请尝试使用Pointer.getCharArray(long offset,int arraySize)
method of the pointer class。
我猜你正在打印的是通过默认编码转换为字符串的指针的任意内存位置。