在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

想知道java怎么取com.sun.jna.ptr.ByteByReference里面的数据。

兄弟帮我问一下,想知道java怎么取com.sun.jna.ptr.ByteByReference里面的数据。?

做项目时,使用了JNI,对应该是jni调用C/C++的方法,
在c中有这么个方法,参数如下图:

在java中与它对应的方法是:
public void invoke(NativeLong lRealHandle, int dwDataType,ByteByReference pBuffer, int dwBufSize, int dwUser) {}。
其中图中红色框内的参数对应ByteByReference pBuffer;绿色框内的参数对应 int dwBufSize。
**********************下面是问题的所在***********
pBuffer在c中是指针,在java中是com.sun.jna.ptr.ByteByReference。
那么,我要怎么用pBuffer取数据??????????????我要取一个byte[],长度是dwBufSize。
额,请不要说getValue(),这取的应该是一个byte.
最新回答
拿着试卷唱忐忑

2025-03-27 00:04:39

我感觉你这样设计有问题,JNI中java和C/C++的方法应该是保留java的方法名,当然这个不是重点,重点是你里面的参数显然不一致。ByteByReference是个对象类型,我们无法把它弄成一个指针类型,毕竟java没有指针。我的建议是,pBuffer不要作为参数,用具体的类型。pBuffer作为
全局变量
在别的地方初始化,这样不影响你在invoke方法里面用pBuffer来获取值。我这只是从你的描述简单的看,具体的需求我也不太清楚你要做什么,个人建议。
追问
方法名不一样是因为这是个回调函数,这个C++的方法也是开源的SDK中的,我无法修改。这个例子也是这个SDK的样例,ByteByReferencecom是com.sun.jna.ptr.ByteByReference,是jna中的,无奈找不到怎么取数据的介绍。。