the*_*ejh 8 c java pointers jna
如何从JNA中用C调用此方法签名的方法?
int open_device(context *ctx, device **dev, int index);
Run Code Online (Sandbox Code Playgroud)
C方法的最后两行如下所示:
*dev = pdev;
return 0;
Run Code Online (Sandbox Code Playgroud)
这是该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;
Run Code Online (Sandbox Code Playgroud)
看来,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
Run Code Online (Sandbox Code Playgroud)