如何从JNA调用C中的此方法签名的方法?如何获取Java中的新指针?
int open_device(context *ctx, device **dev, int index);
的C法的最后两行是这样的:
*dev = pdev;
return 0;
这是该方法中的唯一用途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;
只是好奇:你的更新代码是否适合你?看起来好像你正在设置`* p = p2`,但是然后C函数会执行`* p = pdev`,从而覆盖这个值。 – casablanca 2010-11-28 15:38:10
@casablanca:是的,我测试过它,它的工作原理。 – thejh 2010-11-28 19:58:15
@thejh你知道如何处理由于指向无效内存地址而创建的invalidMemoryAccess异常吗? – mayooran 2015-11-12 05:55:23