如何在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类具有允许多个间接访问的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

以上是 如何在Java中获取新的Pointer? 的全部内容, 来源链接: utcz.com/qa/435453.html

回到顶部