如何从 JNA 调用 C 中具有此方法签名的方法?
int open_device(context *ctx, device **dev, int index);
C 方法的最后两行如下所示:
*dev = pdev;
return 0;
这是唯一的用途dev
在那个方法中。这意味着我必须将一个指向空指针的指针传递给该方法,对吧?然后该方法用a的地址填充空指针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;
看来 JNAPointer班级有setPointer
and 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)