例如NET_DVR_FTPCFG
struct{
DWORD dwSize;
DWORD dwEnableFTP;
char sFTPIP[16];
DWORD dwFTPPort;
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
DWORD dwDirLevel;
WORD wTopDirMode;
WORD wSubDirMode;
BYTE byEnableAnony;
BYTE byPicArchivingInterval;
BYTE byRes[22];
}
例如NET_DVR_SCHED_CAPTURECFG
struct{
NET_DVR_CAPTURE_DAY struCaptureHoliday;
NET_DVR_CAPTURE_DAY struCaptureDay[MAX_DAYS];
NET_DVR_CAPTURE_SCHED struCaptureSched[MAX_DAYS][MAX_TIMESEGMENT_V30];
}
C++和Java类型对应:
DWORD-----int
WORD-----short
char-----byte
BYTE-----byte
指针-----Pointer
LONG--------com.sun.jna.NativeLong
LPVOID--------com.sun.jna.Pointer
LPDWORD--------com.sun.jna.ptr.IntByReference
union联合体-----自定义类继承Union
union 联合体示例
// 联合体的结构体
public static class UnionServer extends Union {
public struDomain strudomain = new struDomain();
public struAddrIP struaddrIP = new struAddrIP();
}
public static class NET_DVR_FTPCFG_V40 extends Structure {
public UnionServer unionserver = new UnionServer();
}
// 获取联合体中的值
userCfg.unionserver.setType(HCNetSDK.StruAddrIP.class);
userCfg.unionserver.read();
System.out.println("FTP-ip地址:" + new String(userCfg.unionserver.struaddrIP.struIp.sIpV4).trim());
// 设置联合体中的值
userCfg.unionserver.setType(HCNetSDK.StruAddrIP.class);
String sFTPIP = "10.10.15.27";
userCfg.unionserver.struaddrIP.struIp.sIpV4 = new byte[16];
System.arraycopy(sFTPIP.getBytes(), 0, userCfg.unionserver.struaddrIP.struIp.sIpV4, 0, sFTPIP.length());
注意:
1、转java的顺序严格按照SDK使用手册,千万不要自行调整顺序。
2、数组长度严格按照SDK使用手册,千万不要自行调整长度。
3、二维数组要特殊处理转换成一维数组嵌套一维数组。
4、对象和数组要初始化。
转成java类型后
public static class NET_DVR_FTPCFG extends Structure { //FTP上传参数结构体。
public int dwSize;
public int dwEnableFTP;
public byte[] sFTPIP = new byte[16]; /* FTP IP */
public int dwFTPPort;
public byte[] sUsername = new byte[NAME_LEN]; /* 用户名 */
public byte[] sPassword = new byte[PASSWD_LEN]; /* 密码 */
public int dwDirLevel;
public short wTopDirMode;
public short wSubDirMode;
public byte byEnableAnony;
public byte byPicArchivingInterval;
public byte[] byRes3 = new byte[22];
}
public static class NET_DVR_SCHED_CAPTURECFG extends Structure {
public NET_DVR_CAPTURE_DAY struCaptureHoliday = new NET_DVR_CAPTURE_DAY();
public NET_DVR_CAPTURE_DAY[] struCaptureDay = new NET_DVR_CAPTURE_DAY[MAX_DAYS];
public tempStructure[] tempStructure = new tempStructure[MAX_DAYS]; // 二维数组特殊处理
}
public static class tempStructure extends Structure{
public NET_DVR_CAPTURE_SCHED[] struCaptureSched = new NET_DVR_CAPTURE_SCHED[MAX_TIMESEGMENT_V30];
}