admin管理员组文章数量:1530085
记一次linux部署海康sdk错误
报错内容如下
Caused by:
java.lang.Error:
Structure.getFieldOrder() on class com.xxx.sdk.HCNetSDK$NET_DVR_DEVICEINFO_V30 does not provide enough names [0] ([]) to match declared fields [31] ([byAlarmInPortNum, byAlarmOutPortNum, byAudioChanNum, byChanNum, byDVRType, byDiskNum, byHighDChanNum, byIPChanNum, byLanguageType, byMainProto, byMirrorChanNum, byMultiStreamProto, byRes2, byStartChan, byStartDChan, byStartDTalkChan, byStartVoiceInChanNo, bySubProto, bySupport, bySupport1, bySupport2, bySupport3, bySupport4, bySupport5, bySupport6, bySupport7, byVoiceInChanNum, byZeroChanNum, sSerialNumber, wDevType, wStartMirrorChanNo])
错误原因:
这个问题是因为海康jna.jar比较老,结构体定义没有getFiledOrder,可创建一个类继承 Structure
解决方法:
import com.sun.jna.Structure;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
public class HIKSDKStructure extends Structure {
protected List<String> getFieldOrder(){
List<String> fieldOrderList = new ArrayList<String>();
for (Class<?> cls = getClass();
!cls.equals(HIKSDKStructure.class);
cls = cls.getSuperclass()) {
Field[] fields = cls.getDeclaredFields();
int modifiers;
for (Field field : fields) {
modifiers = field.getModifiers();
if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
continue;
}
fieldOrderList.add(field.getName());
}
}
return fieldOrderList;
}
}
错误二:
报错内容:
Error creating bean with name 'xxxImpl':
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Invalid calling convention 63
可能错误原因:
海康sdk方法继承了StdCallLibrary.StdCallCallback,它是win32系统使用的
解决方法:
StdCallLibrary.StdCallCallback改成Library, Callback
参考文章
本文标签: 报错StructuregetFieldOrderSD海康
版权声明:本文标题:海康sd报错Structure.getFieldOrder() on class com.xxx.sdk.HCNetSDK$NET_DVR_DEVICEINFO_V30 does not provid 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725840365a1044950.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论