如何在Java中获得新的指针?

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)

cas*_*nca 9

看来,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
Run Code Online (Sandbox Code Playgroud)