xtfje 发表于 2021-6-12 16:17:10

关于大华类库的封装

本帖最后由 xtfje 于 2021-6-12 16:24 编辑

原来在易里做过一个大华的ITC215车辆号牌摄像头识别,并应该在了地磅称重系统上,现在种重新封装一下大华的类库,不能说全部都封装,也要能封装出摄像头的大部分功能,也算一个学习的过程吧.现在遇到一个问题,就是在数据回调里有数据结构体,不知道怎样处理了,请大家帮下忙.API原型是:
// 异步搜索局域网内IPC、NVS等设备,pUserData表示用户数据,不支持多线程调用,
// 接口调用1次只发送搜索信令1次
CLIENT_NET_API LLONG CALL_METHOD CLIENT_StartSearchDevices(fSearchDevicesCB cbSearchDevices, void* pUserData, char* szLocalIp=NULL);


// 异步搜索设备回调(pDevNetInfo内存由SDK内部申请释放)
typedef void (CALLBACK *fSearchDevicesCB)(DEVICE_NET_INFO_EX *pDevNetInfo, void* pUserData);



// 对应CLIENT_StartSearchDevices接口
typedef struct
{
    int               iIPVersion;                           // 4 for IPV4, 6 for IPV6
    char                szIP;                               // IP IPV4形如"192.168.0.1" IPV6形如"2008::1/64"
    int               nPort;                                  // tcp端口
    char                szSubmask;                        // 子网掩码 IPV6无子网掩码
    char                szGateway;                        // 网关
    char                szMac;                  // MAC地址
    char                szDeviceType;          // 设备类型
    BYTE                byManuFactory;                        // 目标设备的生产厂商,具体参考EM_IPC_TYPE类   
    BYTE                byDefinition;                           // 1-标清 2-高清
    bool                bDhcpEn;                              // Dhcp使能状态, true-开, false-关
    BYTE                byReserved1;                            // 字节对齐
    char                verifyData;                         // 校验数据 通过异步搜索回调获取(在修改设备IP时会用此信息进行校验)
    char                szSerialNo;      // 序列号
    char                szDevSoftVersion;       // 设备软件版本号   
    char                szDetailType;          // 设备型号
    char                szVendor;            // OEM客户类型
    char                szDevName;         // 设备名称
    char                szUserName;   // 登陆设备用户名(在修改设备IP时需要填写)
    char                szPassWord;   // 登陆设备密码(在修改设备IP时需要填写)
    unsigned short      nHttpPort;                              // HTTP服务端口号
    WORD                wVideoInputCh;                        // 视频输入通道数
    WORD                wRemoteVideoInputCh;                  // 远程视频输入通道数
    WORD                wVideoOutputCh;                         // 视频输出通道数
    WORD                wAlarmInputCh;                        // 报警输入通道数
    WORD                wAlarmOutputCh;                         // 报警输出通道数)
    BOOL                bNewWordLen;                            // TRUE使用新密码字段szNewPassWord
    char                szNewPassWord;   // 登陆设备密码(在修改设备IP时需要填写)
    BYTE                              byInitStatus;                                                      // 设备初始化状态,按位确定初始化状态
                                                                                                                              // bit0~1:0-老设备,没有初始化功能 1-未初始化账号 2-已初始化账户
                                                                                                                              // bit2~3:0-老设备,保留 1-公网接入未使能 2-公网接入已使能
                                                                                                                              // bit4~5:0-老设备,保留 1-手机直连未使能 2-手机直连使能
                                                                // bit6~7: 0- 未知 1-不支持密码重置 2-支持密码重置

      BYTE                              byPwdResetWay;                                                      // 支持密码重置方式:按位确定密码重置方式,只在设备有初始化账号时有意义                                                                                                                        
                                                                                                                              // bit0-支持预置手机号 bit1-支持预置邮箱 bit2-支持文件导出 bit3-支持密保问题 bit4-支持更换手机号
      BYTE                              bySpecialAbility;                                                // 设备初始化能力,按位确定初始化能力,高八位 bit0-2D Code修改IP: 0 不支持 1 支持, bit1-PN制:0 不支持 1支持

    char                szNewDetailType;   // 设备型号
      BOOL                              bNewUserName;                                                      // TRUE表示使用新用户名(szNewUserName)字段
      char                              szNewUserName;                // 登陆设备用户名(在修改设备IP时需要填写)
    BYTE                byPwdFindVersion;                     // 密码找回的版本号,设备支持密码重置时有效;
                                                                // 0-设备使用的是老方案的密码重置版本;1-支持预留联系方式进行密码重置操作;
                                                                // 2-支持更换联系方式进行密码重置操作;
      char                cReserved;
}DEVICE_NET_INFO_EX;


在易语言里是这样调用的:

但是,在火山里这种情况怎样处理,我也写了一下,但不对.

有没有高手指点一下.
做好了大家也有用的,我这里有设备,能实际测试.

大华SDK的相关说明,我问了下官方,他说不能只看文档,那个有点老了,要看里面的例子.
设备网络SDK-浙江大华技术股份有限公司 (dahuatech.com)





伟业 发表于 2021-6-12 17:24:19

帮你顶。。。。

xtfje 发表于 2021-6-12 18:58:43

我不顶了

dasemimi 发表于 2021-6-12 19:07:43

看了一下,你的问题的本质是结构体这里有问题,,
你可以打开自带的例子里面 参考 结构类这个的封装,就是用属性读和属性写这种方式来封装
因为这种方法提供了取结构体指针,所以可以拷贝和易差不多,,,

xtfje 发表于 2021-6-15 21:11:27

我看看

hmyroot 发表于 2021-6-16 10:09:10

我记得有个api可以用来拷贝内存

xtfje 发表于 2021-6-16 20:00:56

已经做好了,谢谢大家,
@ @<IP类型> = ((DEVICE_NET_INFO_EX*)@<指针>)->iIPVersion;

flyfee 发表于 2023-6-13 10:38:26

能分享下写好的类库吗???

cxz7411 发表于 2024-2-8 21:12:25

xtfje 发表于 2021-6-16 20:00
已经做好了,谢谢大家,
@ @ = ((DEVICE_NET_INFO_EX*)@)->iIPVersion;

直接用内嵌了啊.现在新版的火山pc的结构体试试可以了吗
页: [1]
查看完整版本: 关于大华类库的封装