【发布时间】:2017-03-28 00:45:43
【问题描述】:
我需要在我的程序中使用带有结构的 c++ DLL。为此,我使用 JNA,但是当我尝试调用内部包含另一个结构的结构时,会发生异常
以下是结构的代码:
public class SSP_PACKET extends Structure {
public short packetTime;
public char PacketLength;
public char[] packetData;
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[]{"packetTime",
"PacketLength",
"packetData"});
}
}
public class SSP_COMMAND_INFO extends Structure {
public byte CommandName;
public byte LogFileName;
public byte Encrypted;
public SSP_PACKET Transmit = new SSP_PACKET();
public SSP_PACKET Receive = new SSP_PACKET();
public SSP_PACKET PreEncryptTransmit = new SSP_PACKET();
public SSP_PACKET PreEncryptReceive = new SSP_PACKET();
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[]{"CommandName",
"LogFileName",
"Encrypted",
"Transmit",
"Receive",
"PreEncryptTransmit",
"PreEncryptReceive"});
}
}
还有例外:
线程“main”中的异常 java.lang.IllegalStateException: Array 字段必须初始化为 com.sun.jna.Structure.deriveLayout(Structure.java:1228) 在 com.sun.jna.Structure.calculateSize(Structure.java:1097) 在 com.sun.jna.Structure.allocateMemory(Structure.java:390) 在 com.sun.jna.Structure.ensureAllocated(Structure.java:366) 在 com.sun.jna.Structure.ensureAllocated(Structure.java:356) 在 com.sun.jna.Structure.size(Structure.java:423) 在 com.sun.jna.Structure.size(Structure.java:1075) 在 com.sun.jna.Native.getNativeSize(Native.java:1271) 在 com.sun.jna.Structure.getNativeSize(Structure.java:2125) 在 com.sun.jna.Structure.getNativeSize(Structure.java:2115) 在 com.sun.jna.Structure.validateField(Structure.java:1149) 在 com.sun.jna.Structure.validateFields(Structure.java:1162) 在 com.sun.jna.Structure.(Structure.java:189) 在 com.sun.jna.Structure.(Structure.java:182) 在 com.sun.jna.Structure.(Structure.java:169) 在 com.sun.jna.Structure.(Structure.java:161) 在 SSP_COMMAND_INFO.(SSP_COMMAND_INFO.java:5) 在 Validator.(Validator.java:28) at test.main(test.java:10)
【问题讨论】: