为什么结构大小总是返回-1?

时间:2015-11-11 09:52:22

标签: java native jna

我创建了以下结构将其映射到C结构。但是当我使用CALCULATESIZE()打印结构的大小时,它总是返回-1。那是为什么?

以下是我的java结构。

public class ipj_action extends Structure {

public long ipj_action_value;
Pointer p;

public ipj_action() {
    setAlignType(Structure.ALIGN_NONE);
    System.out.println("Structure size is  : "+CALCULATE_SIZE);
}

@Override
protected List getFieldOrder() {
    return Arrays.asList("ipj_action_value");

}

}

以下是我称之为的主要课程。

public class RFIDMain {

    public  rfidlib rlib;
    public  ipj_iri_device ipj_iri_device;
    public  ipj_action ipj_action;
    public  ipj_error errorStatus;

    public static void main(String[] args) {

    RFIDMain r = new RFIDMain();


    r.rlib = (rfidlib) Native.loadLibrary("rfidlib", rfidlib.class);
    r.ipj_iri_device = new ipj_iri_device();
    r.ipj_action = new ipj_action();
    r.errorStatus = new ipj_error();
    r.ipj_action.ipj_action_value = 0x1;

    r.errorStatus = r.rlib.start(r.ipj_iri_device, r.ipj_action);

    System.out.println(r.errorStatus);

}

2 个答案:

答案 0 :(得分:1)

您正在引用一个整数常量CALCULATE_SIZE,(常量在所有大写中的Java样式约定是一个线索,因为它是一个变量而不是方法)。您需要调用方法calculateSize

https://jna.java.net/javadoc/com/sun/jna/Structure.html#calculateSize(boolean)

答案 1 :(得分:1)

你想要Structure.size()

如果JNA无法确定结构大小,那么该方法将失败,如果您忽略初始化任何数组字段或使用JNA无法转换为本机等效类型的类型,则可能会发生这种情况。