如何在Java中获取新的Pointer?

问题描述

看来,JNA Pointer类具有允许多个间接访问的setPointergetPointer方法,并且Memory该类实际上是在“分配”本机对象。因此,您应该能够执行以下操作:(我只是从JNA文档中猜测,我还没有对此进行测试)

Pointer pDev = new Memory(Pointer.SIZE); // allocate space to hold a pointer value
// pass pDev to open_device
Pointer dev = pDev.getPointer(0);        // retrieve pointer stored at pDev

解决方法

如何从JNA用C调用具有此方法签名的方法?

int open_device(context *ctx,device **dev,int index);

C方法的最后两行如下所示:

*dev = pdev;
return 0;

那是该dev方法的唯一用途。这意味着我必须将poiner传递给该方法的空指针,对吗?然后,该方法用device对象的地址填充空指针,然后我可以将指向设备的指针传递给其他方法。

我的问题是:这是正确的方法吗?如果是,如何从Java分配新的指针?


根据公认的答案,我这样做:

Memory p = new Memory(Pointer.SIZE);
Memory p2 = new Memory(Pointer.SIZE);
p.setPointer(0,p2);
nativeLib.open_device(ctx,p,index);
return p2;

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”