如何在Java中获取新的Pointer?
如何从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;
回答:
看来,JNA Pointer
类具有允许多个间接访问的setPointer
和getPointer
方法,并且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
以上是 如何在Java中获取新的Pointer? 的全部内容, 来源链接: utcz.com/qa/435453.html