package com.avic;
import java.util.ArrayList;
import java.util.List;
import com.avic.JNATest.NetSdkAPI.LPH264_DVR_DEVICEINFO;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.ptr.IntByReference;
/*
*需要把要调用的DLL文件以及依赖文件放到响应位数的JDK/bin下
*/
public class JNATest {
// 1.实现NetSdk.dll文件接口集成JNA的Library接口
public interface NetSdkAPI extends Library {
// 2.变量定义:
/// 告警状态结构体
public static class SDK_DVR_ALARMSTATE extends Structure{
public static class ByReference extends SDK_DVR_ALARMSTATE implements
Structure.ByReference {}
public static class ByValue extends SDK_DVR_ALARMSTATE implements
Structure.ByValue {}
public String iVideoMotion; ///< 移动侦测状态,用掩码表示通道号,byte0代表通道一,以此类推 1: 有告警 0: 无告警
public String iVideoBlind; //< 视频遮挡状态,用掩码表示通道号,byte0代表通道一,以此类推 1: 有告警 0: 无告警
public String iVideoLoss; //< 视频丢失状态,用掩码表示通道号,byte0代表通道一,以此类推 1: 有告警 0: 无告警
public String iAlarmIn; //< 告警输入状态,用掩码表示通道号,byte0代表通道一,以此类推 1: 有告警 0: 无告警
public String iAlarmOut; //< 告警输出状态,用掩码表示通道号,byte0代表通道一,以此类推 1: 有告警 0: 无告警
@Override
protected List<String> getFieldOrder() {
List<String> Field = new ArrayList<String>();
Field.add("iVideoMotion");
Field.add("iVideoBlind");
Field.add("iVideoLoss");
Field.add("iAlarmIn");
Field.add("iAlarmOut");
return Field;
}
}
/// 通道状态结构体
public static class SDK_SYSTEM_TIME extends Structure{
public static class ByReference extends SDK_SYSTEM_TIME implements
Structure.ByReference {}
public static class ByValue extends SDK_SYSTEM_TIME implements
Structure.ByValue {}
public int year; ///< 年。
public int month; ///< 月,January = 1, February = 2, and so on.
public int day; ///< 日。
public int wday; ///< 星期,Sunday = 0, Monday = 1, and so on
public int hour; ///< 时。
public int minute; ///< 分。
public int second; ///< 秒。
public int isdst; ///< 夏令时标识。
@Override
protected List<String> getFieldOrder() {
List<String> Field = new ArrayList<String>();
Field.add("year");
Field.add("month");
Field.add("day");
Field.add("wday");
Field.add("hour");
Field.add("minute");
Field.add("second");
Field.add("isdst");
return Field;
}
}
/// 通道状态结构体
public static class SDK_DVR_CHANNELSTATE extends Structure{
public static class ByReference extends SDK_DVR_CHANNELSTATE implements
Structure.ByReference {}
public static class ByValue extends SDK_DVR_CHANNELSTATE implements
Structure.ByValue {}
public boolean bRecord; //< 是否正在录像
public int iBitrate; //< 当前码率
@Override
protected List<String> getFieldOrder() {
List<String> Field = new ArrayList<String>();
Field.add("bRecord");
Field.add("iBitrate");
return Field;
}
}
/// DVR工作状态结构体
public static class SDK_DVR_WORKSTATE extends Structure{
public static class ByReference extends SDK_DVR_WORKSTATE implements
Structure.ByReference {}
public static class ByValue extends SDK_DVR_WORKSTATE implements
Structure.ByValue {}
public SDK_DVR_CHANNELSTATE.ByValue[] CHANNELSTATE = new SDK_DVR_CHANNELSTATE.ByValue[50];
public SDK_DVR_ALARMSTATE.ByValue[] ALARMSTATE = new SDK_DVR_ALARMSTATE.ByValue[50];
@Override
protected List<String> getFieldOrder() {
List<String> Field = new ArrayList<String>();
Field.add("CHANNELSTATE");
Field.add("ALARMSTATE");
return Field;
}
}
/// OEM结构体
public static class SDK_OEMInfo extends Structure{
public static class ByReference extends SDK_OEMInfo implements
Structure.ByReference {}
public static class ByValue extends SDK_OEMInfo implements
Structure.ByValue {}
public int nOEMID; //OEM ID
public String sCompanyName; //公司名
public String sTel; //电话
public String sAddr; //地址
@Override
protected List<String> getFieldOrder() {
List<String> Field = new ArrayList<String>();
Field.add("nOEMID");
Field.add("sCompanyName");
Field.add("sTel");
Field.add("sAddr");
return Field;
}
}
/// 设备类型结构体
public static class SDK_DeviceType extends Structure{
/*public static class ByReference extends SDK_DeviceType implements
Structure.ByReference {}
public static class ByValue extends SDK_DeviceType implements
Structure.ByValue {}*/
public int SDK_DEVICE_TYPE_DVR;
public int SDK_DEVICE_TYPE_NVS;
public int SDK_DEVICE_TYPE_IPC;
public int SDK_DEVICE_TYPE_HVR;
public int SDK_DEVICE_TYPE_IVR;
public int SDK_DEVICE_TYPE_MVR;
public int SDK_DEVICE_TYPE_NR;
@Override
protected List<String> getFieldOrder() {
List<String> Field = new ArrayList<String>();
Field.add("SDK_DEVICE_TYPE_DVR");
Field.add("SDK_DEVICE_TYPE_NVS");
Field.add("SDK_DEVICE_TYPE_IPC");
Field.add("SDK_DEVICE_TYPE_HVR");
Field.add("SDK_DEVICE_TYPE_IVR");
Field.add("SDK_DEVICE_TYPE_MVR");
Field.add("SDK_DEVICE_TYPE_NR");
return Field;
}
}
/* /// 设备类型
public enum SDK_DeviceType{
SDK_DEVICE_TYPE_DVR, ///< 普通DVR设备
SDK_DEVICE_TYPE_NVS, ///< NVS设备
SDK_DEVICE_TYPE_IPC, ///< IPC设备
SDK_DEVICE_TYPE_HVR, ///<混合dvr
SDK_DEVICE_TYPE_IVR, ///<智能dvr
SDK_DEVICE_TYPE_MVR, ///<车载dvr
SDK_DEVICE_TYPE_NR
}*/
/// 设备信息对象
public static class LPH264_DVR_DEVICEINFO extends Structure{
public static class ByReference extends LPH264_DVR_DEVICEINFO implements
Structure.ByReference {}
public static class ByValue extends LPH264_DVR_DEVICEINFO implements
Structure.ByValue {}
public String sSoftWareVersion; //软件版本信息
public String sHardWareVersion; //硬件版本信息
public String sEncryptVersion; //加密版本信息
public SDK_SYSTEM_TIME tmBuildTime; //软件创建时间
public String sSerialNumber; //软件序列号
public int byChanNum; //视频输入通道数
public int iVideoOutChannel; //视频输出通道数
public int byAlarmInPortNum; //报警输入通道数
public int byAlarmOutPortNum; //报警输出通道数
public int iTalkInChannel; //对讲输入通道数
public int iTalkOutChannel; //对讲输出通道数
public int iExtraChannel; //扩展通道数
public int iAudioInChannel; //音频输入通道数
public int iCombineSwitch; //组合编码通道分割模式是否支持切换
public int iDigChannel; //数字通道数
public int uiDeviceRunTime; //系统运行时间
public SDK_DeviceType deviceTye; //设备类型
public String sHardWare; //设备型号
public String uUpdataTime; //<更新日期 例如 2013-09-03 14:15:13
public int uUpdataType; //更新内容
public String sDeviceModel; //设备型号(底层库从加密里获得,sHardWare针对多个设备用同一个程序这种情况区分不了)
public int nLanguage; //国家的语言ID,0英语 1中文 2中文繁体 3韩语 4德语 5葡萄牙语 6俄语
public String sCloudErrCode; //云登陆具体错误内容
public int[] status = new int[32];
//判断新过来的连接是不是通过代理转发的,如果是那么按照服务器3
//返回的限制条件来限制。
//status[0] 路数限制:0代表不限制, n代表限制n路
//status[1]码流限制。0 :不限制。1限制不能观看主码流。
//status[2]限制时间。0:不限制。n:限制n分钟。
//status[3]限制码率,目前分为四档。0:不限制。1:限制为CIF 6帧 100K ,后续待定
//status[4]保留位,后续扩充。
//其中status[0]和status[1]在此处体现。
//status[2]和status[3]在传输码流的过程中体现
@Override
protected List<S
基于JNA的java调用DLL动态库实例
1星 需积分: 50 75 浏览量
2018-11-16
11:02:35
上传
评论
收藏 1.68MB RAR 举报
leesuns
- 粉丝: 0
- 资源: 15
最新资源
- Unity导入Excel文件自动创建class文件和ScriptObject文件,并转化成ScriptObject的插件pro版
- UE4仅k位移产生完美行走动作-UE4项目
- 基于 Python 的校园导航系统
- tensorflow-2.6.3-cp37-cp37m-manylinux2010-x86-64.whl
- tensorflow-2.6.2-cp39-cp39-win-amd64.whl
- tensorflow-2.6.2-cp39-cp39-manylinux2010-x86-64.whl
- 基于Python卷积神经网络人脸识别驾驶员疲劳检测与预警系统源码+使用说明+全部资料.zip
- BPNN-预测.rar
- 灾难分类数据集 PNG(12类 4.8K+ 张图像)
- java8和17的windows、linux版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈