在海康SDK中创建自己的接口和方法

步骤:
在HCNetSDK.java中定义一个方法,并且一定要继承Structure
在这里插入图片描述
public static class NET_DVR_USER_LOGIN_INFO extends Structure {
public byte[] sDeviceAddress = new byte[NET_DVR_DEV_ADDRESS_MAX_LEN];
public byte byRes1;
public short wPort;
public byte[] sUserName = new byte[NET_DVR_LOGIN_USERNAME_MAX_LEN];
public byte[] sPassword = new byte[NET_DVR_LOGIN_PASSWD_MAX_LEN];
public FLoginResultCallBack cbLoginResult;
public Pointer pUser;
public boolean bUseAsynLogin;
public byte[] byRes2 = new byte[128];
}
蓝线和红线的部分是我们用到的回调函数和设备类型,肯定也是没有的,也要创建,同样在HCNetSDK.java这个文件中
//回调函数代码如下
public static interface FLoginResultCallBack extends StdCallCallback {
public void invoke(NativeLong lUserID, int dwResult, Pointer pUser);
}

//下面自己设备类型是我们自己定义的 用于测试登录的回调函数
public static final int NET_DVR_DEV_ADDRESS_MAX_LEN = 178;
public static final int NET_DVR_LOGIN_USERNAME_MAX_LEN = 179;
public static final int NET_DVR_LOGIN_PASSWD_MAX_LEN = 180;
数字要不能跟上面的重复,如下图
在这里插入图片描述
在完成自己方法中我们还需要功能V40,也要在这个文件中自己定义,他只有V30
//NET_DVR_Login_V40()参数结构
public static class NET_DVR_DEVICEINFO_V40 extends Structure
{

}

NativeLong NET_DVR_Login_V40(NET_DVR_USER_LOGIN_INFO pLoginInfo,NET_DVR_DEVICEINFO_V40 lpDeviceInfo);
这个文件中的东西中终于结束了,
我们自己创建一个类FLoginResultCallBack去实现HCNetSDK.FLoginResultCallBack(我们在那里面定义的功能接口)
//实现了海康的消息回调接口
public class FLoginResultCallBack implements HCNetSDK.FLoginResultCallBack {

//实例化海康的接口 HCNetSDK
static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
//实例化回调函数
HCNetSDK.NET_DVR_USER_LOGIN_INFO pLoginInfo=new HCNetSDK.NET_DVR_USER_LOGIN_INFO();

@Override
public void invoke(NativeLong lUserID, int dwResult, Pointer pUser) {
    //这里要自己写具体的实现

    //初始化海康的接口
    boolean initSuc = hCNetSDK.NET_DVR_Init();
    if(!initSuc){

        System.out.println("海康接口初始化失败........");
        }
    //设置IP地址
    String sDeviceIP = "192.168.134.100";
    for (int i = 0; i < sDeviceIP.length(); i++) {
        pLoginInfo.sDeviceAddress[i] = (byte) sDeviceIP.charAt(i);
    }
    //设置账号、密码、端口号
    String name = "admin";
    for (int i = 0; i < name.length(); i++) {
        pLoginInfo.sUserName[i] = (byte) name.charAt(i);
    }
    String password = "kggx12345";
    for (int i = 0; i < password.length(); i++) {
        pLoginInfo.sPassword[i] = (byte) password.charAt(i);
    }
    pLoginInfo.wPort= (short)8000;
    pLoginInfo.bUseAsynLogin = false;


    //回调函数赋值
    FLoginResultCallBack fLoginResultCallBack= new FLoginResultCallBack();
    pLoginInfo.cbLoginResult = fLoginResultCallBack;
    HCNetSDK.NET_DVR_DEVICEINFO_V40 lpDeviceInfo=new HCNetSDK.NET_DVR_DEVICEINFO_V40();
    NativeLong IuserID = hCNetSDK.NET_DVR_Login_V40(pLoginInfo, lpDeviceInfo);

}

}
这样就完成了,你要在那个类中使用就创建这个类调用他的invoke
方法就行。自己给他传参数
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qiaodaima0/article/details/89951904
今日推荐