如何使用JNA从结构中获取Structure.ByReference?

时间:2014-10-09 22:03:04

标签: java c jruby jna

我的java代码中有一个Structure对象。但是使用JNAerator生成的Jar期望Structure.ByReference作为数据类型。在jna或代码片段中是否有任何方法可以将Structure对象转换为Structure.ByReference对象?

1 个答案:

答案 0 :(得分:1)

通常,在传递参数时不需要显式指定Structure.ByReference。如果它是一个参数,您可以从签名中删除.ByReference,它就可以正常工作。

如果它是结构中的一个字段,那么JNA会按值解释Structure,在这种情况下, 需要明确提供.ByReference

这是一种方法。

class MyStructure extends Structure {
    class ByReference extends MyStructure implements Structure.ByReference {
        public ByReference() { }
        public Byreference(Pointer p) { super(p); read(); }
    }
    public MyStructure() { }
    public MyStructure(Pointer p) { super(p); read(); }
}

MyStructure s;
// ...
MyStructure.ByReference ref = new MyStructure.ByReference(s.getPointer());