为什么结构大小总是返回 -1?
Why is structure size always returning -1?
我创建了以下结构,将其映射到 C structure.But 当我使用 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");
}
}
下面是我调用它的主要 class。
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);
}
您正在引用一个整数常量 CALCULATE_SIZE
,(Java 常量全部大写的风格约定是一个线索,事实上它是一个变量而不是一个方法)。您需要改为调用方法 calculateSize
.
https://jna.java.net/javadoc/com/sun/jna/Structure.html#calculateSize(boolean)
你想要Structure.size()
.
如果 JNA 无法确定结构大小,该方法将失败,如果您忽略初始化任何数组字段或使用 JNA 无法转换为本机等效类型的类型,则可能会发生这种情况。
我创建了以下结构,将其映射到 C structure.But 当我使用 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");
}
}
下面是我调用它的主要 class。
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);
}
您正在引用一个整数常量 CALCULATE_SIZE
,(Java 常量全部大写的风格约定是一个线索,事实上它是一个变量而不是一个方法)。您需要改为调用方法 calculateSize
.
https://jna.java.net/javadoc/com/sun/jna/Structure.html#calculateSize(boolean)
你想要Structure.size()
.
如果 JNA 无法确定结构大小,该方法将失败,如果您忽略初始化任何数组字段或使用 JNA 无法转换为本机等效类型的类型,则可能会发生这种情况。