Exception in thread "main" java.lang.Error: Structure.getFieldOrder() on class com.gc.checkingHangingRail.utils.haikang.HCNetSDK$NET_DVR_WORKSTATE_V30 does not provide enough names [0] ([]) to match declared fields [8] ([byAlarmInStatic, byAlarmOutStatic, byAudioChanStatus, byRes, dwDeviceStatic, dwLocalDisplay, struChanStatic, struHardDiskStatic])
	at com.sun.jna.Structure.getFields(Structure.java:1077)
	at com.sun.jna.Structure.deriveLayout(Structure.java:1234)
	at com.sun.jna.Structure.calculateSize(Structure.java:1159)
	at com.sun.jna.Structure.allocateMemory(Structure.java:401)
	at com.sun.jna.Structure.ensureAllocated(Structure.java:377)
	at com.sun.jna.Structure.ensureAllocated(Structure.java:367)
	at com.sun.jna.Structure.write(Structure.java:764)
	at com.sun.jna.Structure.autoWrite(Structure.java:2166)
	at com.sun.jna.Function.convertArgument(Function.java:532)
	at com.sun.jna.Function.invoke(Function.java:345)
	at com.sun.jna.Library$Handler.invoke(Library.java:265)
	at com.sun.proxy.$Proxy0.NET_DVR_GetDVRWorkState_V30(Unknown Source)
	at com.gc.checkingHangingRail.utils.HaiKangSDKSaveRealData.getDVRConfig(HaiKangSDKSaveRealData.java:54)
	at com.gc.checkingHangingRail.utils.HaiKangSDKSaveRealData.main(HaiKangSDKSaveRealData.java:15)

Exception in thread "main" java.lang.Error: Structure.getFieldOrder() on class com.gc.checkingHangingRail.utils.haikang.HCNetSDK$NET_DVR_WORKSTATE_V30 does not provide enough names [0] ([]) to match declared fields [8] ([byAlarmInStatic, byAlarmOutStatic, byAudioChanStatus, byRes, dwDeviceStatic, dwLocalDisplay, struChanStatic, struHardDiskStatic])

出现这个错误!!

解决方法:找到对应位置

分析错误原因:

Structure.getFieldOrder()匹配的有8个而实际只有0个。

所以再开头添加添加

@Structure.FieldOrder(value= {"dwDeviceStatic","struHardDiskStatic","struChanStatic"
		,"byAlarmInStatic","byAlarmOutStatic","dwLocalDisplay"
		,"byAudioChanStatus","byRes"})

修改完如下:

@Structure.FieldOrder(value= {"dwDeviceStatic","struHardDiskStatic","struChanStatic"
		,"byAlarmInStatic","byAlarmOutStatic","dwLocalDisplay"
		,"byAudioChanStatus","byRes"})
public static class NET_DVR_WORKSTATE_V30 extends Structure {//DVR工作状态(9000扩展)
	public int dwDeviceStatic; 	//设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉
	public NET_DVR_DISKSTATE[]  struHardDiskStatic = (NET_DVR_DISKSTATE[])new NET_DVR_DISKSTATE().toArray(MAX_DISKNUM_V30);
	public NET_DVR_CHANNELSTATE_V30[] struChanStatic = (NET_DVR_CHANNELSTATE_V30[])new NET_DVR_CHANNELSTATE_V30().toArray(MAX_CHANNUM_V30);//通道的状态
	public byte[]  byAlarmInStatic = new byte[MAX_ALARMIN_V30]; //报警端口的状态,0-没有报警,1-有报警
	public byte[]  byAlarmOutStatic = new byte[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出
	public int  dwLocalDisplay;//本地显示状态,0-正常,1-不正常
        public  byte [] byAudioChanStatus = new byte[MAX_AUDIO_V30];//表示语音通道的状态 0-未使用,1-使用中, 0xff无效
        public  byte[]  byRes = new byte[10];
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐