问题描述
看来,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
解决方法
如何从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;