java - Java中如何获取一个新的指针?

标签 java c pointers jna

如何从 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类具有 setPointergetPointer 方法以允许多个间接访问,并且 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/

相关文章:

java - 在 Java 中将谓词作为 lambda 返回

c++ - 为什么我的 while 循环是无限的?

c - 在 ubuntu 11.04 上使用 gcc 4.5.2 声明函数指针时出错

Android JNI - 如何正确释放在 C native 函数中分配的内存

c - 数组段错误

c - 共享内存程序不同步 - 出现段错误

java - 如何在Java中从字母表中的 "z"循环回 "a"?

java - 如何制作以某种方式重复参数方法的java方法?

Java正则表达式匹配确切数量的破折号

pointers - 指向结构体的指针(或缺少结构体的指针)