如何从 JNA 在 C 中调用具有此方法签名的方法?
int open_device(context *ctx, device **dev, int index);
C 方法的最后两行如下所示:
*dev = pdev;
return 0;
这是该方法中唯一使用 dev
的地方。这意味着我必须将指针传递给指向该方法的空指针,对吗?然后该方法用 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
类来实际“分配” native 对象。所以你应该能够做类似的事情:(我只是从 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 - Java中如何获取一个新的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294264/