[英]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.