0

我是 JNA 的新手。在我的一个应用程序中,我需要将 char * aarr= new char[200]从 c 返回到 java。我无法理解如何做到这一点。我的 c++ 函数的返回类型应该是什么?我应该如何声明我的 java 方法来恢复 char 数组?有没有其他方法,比如在 c++ 中通过引用传递变量来获取 c++ 的 char[] 值?

4

2 回答 2

1

如果您从本机代码返回缓冲区,则需要使用Pointer和使用各种指针数据访问方法来获取/设置数据(例如Pointer.getByteArray()Pointer.setByteArray())。请注意,如果数据是由本机代码分配的,您必须提供某种方式来处理内存,因此您需要将指针保留在本机代码中以供以后处理,或者将其从 Java(作为 a Pointer)传回你的 C++ 可以做适当的delete[]操作。

如果您可以从 Java 端分配缓冲区(如果 Java 端需要广泛操作数据,则建议使用),如果本机代码只需要访问它,则使用直接ByteBufferMemory如果数据是长期存在的,或者使用原始字节数组在本机通话期间。

JNA 文档清楚地表明 nativechar映射到 Java byte

另请记住,Java 只有带符号的值,因此您需要将 Javabyte值(可能为负数)转换为更大的类型(shortint)并屏蔽高位,例如

int data = (int)byteValue & 0xFF;

于 2012-05-21T11:51:01.520 回答
0

请尝试使用Pointer.getCharArray(long offset,int arraySize) 指针类的方法

我猜你正在打印的是通过默认编码转换为字符串的指针的任意内存位置。

于 2012-05-18T11:19:13.643 回答