大华 解码器上大屏代码事例

本文提供了大华解码器将视频显示到大屏的代码实例,包括调用代码和结构体定义,旨在帮助读者理解和实现相关功能。如有问题或建议,作者欢迎私信交流。
摘要由CSDN通过智能技术生成

昨天上传了一个海康解码器视频上大屏的代码事例    因为最近也在弄大华的设备  所以也传一份事例  希望对大家有帮助  有问题或建议可私信我  

同样的  传调用代码  及结构定义

1.调用代码

/// <视频上墙>
        /// 视频上墙
        /// </视频上墙>
        /// <returns></returns>
        public int VideoWall(string ip,int decoderID,string DecoderIP,string Name) 
        {
            int res = 0;
            try
            {
                int LoginID = 0;
                int error = 0;
                //是否已经注册过该设备(虚拟表中存在 则表明已经注册过)
                DataRow[] loginRow = dlo.Select("IP='" + DecoderIP + "'");
                //虚拟表中不存在(未注册)
                if (loginRow.Count() == 0)
                {
                    LoginID = DHClient.DHLogin(DecoderIP, 37777, "admin", "admin", out DHdeviceInfo, out error);
                    if (LoginID > 0)
                    {
                        //将注册的设备ip和注册的返回值加到虚拟表中
                        loRow = dlo.NewRow();
                        loRow["IP"] = DecoderIP;
                        loRow["LoginID"] = LoginID;
                        dlo.Rows.Add(loRow);
                    }
                    else
                    {
                        MessageBox.Show("解码器注册失败,请检查设备或网络状况", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return 0;
                    }

                }
                //虚拟表中存在
                else if (loginRow.Count() > 0)
                {
                    //读取出注册设备返回的id
                    LoginID = int.Parse(loginRow[0]["LoginID"].ToString());
                }
                if (LoginID > 0)
                {
                    //查询解码器信息
                    DEV_DECODER_INFO lpdecoder_info = new DEV_DECODER_INFO();
                    bool ress = DHClient.DHQueryDecoderInfo(LoginID, out lpdecoder_info, 2000);

                    //添加视频上墙需要的设备信息
                    DEV_ENCODER_INFO lpencoder_info = new DEV_ENCODER_INFO();
                    lpencoder_info.byDecoderID = (byte)decoderID;

                    lpencoder_info.szDevIpEx = new byte[64];
                    lpencoder_info.szDevPwd = new byte[16];
                    lpencoder_info.szDevUser = new byte[16];
                    lpencoder_info.wDevPort = 37777;
                    lpencoder_info.nDevChannel = Convert.ToInt32(ip.Split(';')[1]);	//通道	
                    lpencoder_info.nStreamType = 0; //主码流
                    lpencoder_info.bDevChnEnable = 1;
                    lpencoder_info.byConnType = 0;	//TCP
                    lpencoder_info.byWorkMode = 0;	//直连

                    // System.Text.Encoding.Default.GetBytes(camip).CopyTo(lpencoder_info.szDevIpEx, 0);
                    System.Text.Encoding.Default.GetBytes(ip.Split(';')[0]).CopyTo(lpencoder_info.szDevIpEx, 0);
                    System.Text.Encoding.Default.GetBytes("admin").CopyTo(lpencoder_info.szDevPwd, 0);
                        System.Text.Encoding.Default.GetBytes("admin").CopyTo(lpencoder_info.szDevUser
                    //视频上墙
                    res = DHClient.DHSwitchDecTVEncoder(LoginID, decoderID, ref lpencoder_info, IntPtr.Zero);
                }

            }
            catch (Exception ex)
            {
                fmessage.MessageRecord(ex.Message);
            }
            //设置成功 返回1
            if (res > 0)
            {

                return 1;

            }
            //设置失败 返回0
            else
            {
                return 0;
            }
        }
程序中 注册的ip会被储存到一个DataTable中   所以 代码中会出现查询LoginID  亲测可用


2.结构体 及调用方法的声明

/*
 * ************************************************************************
 * 
 * $Id: DaHuaSDKStruct.cs 6914 2012-11-09 04:58:08Z liu_hai $
 * 
 *                            SDK
 *                      大华网络SDK(C#版)
 * 
 * Copyright(c)1992-2012, ZheJiang Dahua Technology Stock Co.Ltd.
 *                      All Rights Reserved
 * 版 本 号:0.01
 * 文件名称:DaHuaSDKStruct.cs
 * 功能说明:原始封装[在现有的SDK(C++版)上再一次封装,基本与原C++接口对应]
 * 作    者:刘海
 * 作成日期:2012年5月26日
 * 修改日志:    日期          版本号        作者        变更事由
 *              2012年5月26日  0.01         刘海        新建作成
 * 
 * ************************************************************************
 */

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Net;


namespace Decoder
{

    #region << 结构定义 >>

    /// <summary>
    /// 录像文件信息
    /// </summary>
    public struct NET_RECORDFILE_INFO
    {
        /// <summary>
        /// 通道号
        /// </summary>
        public uint ch;
        /// <summary>
        /// 文件名
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        //public char[] filename;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] filename;
        //public string filename;
        /// <summary>
        /// 文件长度
        /// </summary>
        public uint size;
        /// <summary>
        /// 开始时间
        /// </summary>
        public NET_TIME starttime;
        /// <summary>
        /// 结束时间
        /// </summary>
        public NET_TIME endtime;
        /// <summary>
        /// 磁盘号
        /// </summary>
        public uint driveno;
        /// <summary>
        /// 起始簇号
        /// </summary>
        public uint startcluster;
        /// <summary>
        /// 录像文件类型  0:普通录像;1:报警录
        /// </summary>
        public int nRecordFileType;
    }

    /// <summary>
    /// 错误内容
    /// </summary>
    public struct OPERATION_INFO
    {
        /// <summary>
        /// 错误代码
        /// </summary>
        public string errCode;
        /// <summary>
        /// 错误描述
        /// </summary>
        public string errMessage;
        /// <summary>
        /// 按自定义格式返回错误内容字符串
        /// </summary>
        /// <param name="FormatStyle">错误内容字符串格式:errcode代替错误代码;errmsg代替错误描述</param>
        /// <returns></returns>
        public string ToString(string FormatStyle)
        {
            string returnValue = FormatStyle;
            if (returnValue.Length == 0)
            {
                returnValue = "errcode:errmsg!";
            }
            returnValue = returnValue.ToUpper();
            returnValue = returnValue.Replace("ERRCODE", errCode).Replace("ERRMSG", errMessage);
            return returnValue;

        }
    }

    /// <summary>
    /// 设备状态信息
    /// </summary>
    public struct NET_CLIENT_STATE
    {
        /// <summary>
        /// 通道数
        /// </summary>
        public int channelcount;

        /// <summary>
        /// 报警输入数
        /// </summary>
        public int alarminputcount;

        /// <summary>
        /// 外部报警
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] alarm;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] alarm;

        /// <summary>
        /// 动态检测
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] motiondection;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] motiondection;

        /// <summary>
        /// 视频丢失
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] videolost;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] videolost;
    }

    /// <summary>
    /// 设备通道状态信息
    /// </summary>
    public struct NET_DEV_CHANNELSTATE
    {
        /// <summary>
        /// 通道是否在录像,0-不录像,1-录像
        /// </summary>
        public byte byRecordStatic;
        /// <summary>
        /// 连接的信号状态,0-正常,1-信号丢失
        /// </summary>
        public byte bySignalStatic;
        /// <summary>
        /// 通道硬件状态,0-正常,1-异常,例如DSP死掉
        /// </summary>
        public byte byHardwareStatic;
        /// <summary>
        /// 暂时无效
        /// </summary>
        public char reserve;
        /// <summary>
        /// 实际码率,暂时无效
        /// </summary>
        public UInt32 dwBitRate;
        /// <summary>
        /// 客户端连接的个数, 暂时无效
        /// </summary>
        public UInt32 dwLinkNum;
        /// <summary>
        /// 客户端的IP地址,暂时无效
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public UInt32[] dwClientIP;
    }

    /// <summary>
    /// 设备硬盘状态信息
    /// </summary>
    public struct NET_DEV_DISKSTATE
    {
        /// <summary>
        /// 硬盘的容量
        /// </summary>
        public UInt32 dwVolume;
        /// <summary>
        /// 硬盘的剩余空间
        /// </summary>
        public UInt32 dwFreeSpace;
        /// <summary>
        /// 硬盘的状态,休眠,活动,不正常等
        /// </summary>
        public UInt32 dwStatus;
    }

    /// <summary>
    /// 设备工作状态信息
    /// </summary>
    public struct NET_DEV_WORKSTATE
    {
        /// <summary>
        /// 设备状态0x00 正常,0x01 CPU占用过高, 0x02 硬件错误
        /// </summary>
        public UInt32 dwDeviceStatic;
        /// <summary>
        /// 设备暂时不支持
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public NET_DEV_DISKSTATE[] stHardDiskStatic;
        /// <summary>
        /// 通道的状态
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public NET_DEV_CHANNELSTATE[] stChanStatic;
        /// <summary>
        /// 报警端口的状态0-无报警,1-有报警
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] byAlarmInStatic;
        /// <summary>
        /// 报警输出端口的状态0-无输出,1-有输出
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public byte[] byAlarmOutStatic;
        /// <summary>
        /// 本地显示状态0-正常,1-不正常
        /// </summary>
        public UInt32 dwLocalDisplay;
    }

    /// <summary>
    /// 串口协议信息(232和485
    /// </summary>
    public struct PROTOCOL_INFO
    {
        /// <summary>
        /// 协议名
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 12)]
        //public char[] protocolname;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
        public byte[] protocolname;
        /// <summary>
        /// 波特率
        /// </summary>
        public uint baudbase;
        /// <summary>
        /// 数据位
        /// </summary>
        public char databits;
        /// <summary>
        /// 停止位
        /// </summary>
        public char stopbits;
        /// <summary>
        /// 校验位
        /// </summary>
        public char parity;
        /// <summary>
        /// 暂不支持
        /// </summary>
        public char reserve;
    }

    /// <summary>
    /// 报警IO控制(报警输出和报警输入使能)
    /// </summary>
    public struct ALARM_CONTROL
    {
        /// <summary>
        /// 端口序号
        /// </summary>
        public ushort index;
        /// <summary>
        /// 端口状态
        /// </summary>
        public ushort state;
    }


    public struct OPR_RIGHT
    {
        public UInt32 dwID;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] name;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] name;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] memo;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] memo;
    }

    /// <summary>
    /// 用户信息
    /// </summary>
    public struct USER_INFO
    {
        public UInt32 dwID;
        public UInt32 dwGroupID;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 8)]
        //public char[] name;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public byte[] name;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 8)]
        //public char[] passWord;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public byte[] passWord;
        public UInt32 dwRightNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
        public UInt32[] rights;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] memo;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] memo;
        /// <summary>
        /// 本用户是否允许复用:1.复用;0:不复用;
        /// </summary>
        public UInt32 dwReusable;
        public USER_INFO(string st)
        {
            dwID = new UInt32();
            dwGroupID = new UInt32();
            dwRightNum = new UInt32();
            dwReusable = new UInt32();
            name = new byte[8];
            passWord = new byte[8];
            rights = new UInt32[100];
            memo = new byte[32];
        }
    }

    /// <summary>
    /// 用户组结构
    /// </summary>
    public struct USER_GROUP_INFO
    {
        public UInt32 dwID;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 8)]
        //public char[] name;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public byte[] name;
        public UInt32 dwRightNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
        public UInt32[] rights;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] memo;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] memo;
        public USER_GROUP_INFO(string strP)
        {
            dwID = new UInt32();
            name = new byte[8];
            dwRightNum = new UInt32();
            rights = new UInt32[100];
            memo = new byte[32];
        }
    }


    /// <summary>
    /// 用户信息配置结构
    /// </summary>
    public struct USER_MANAGE_INFO
    {
        public UInt32 dwRightNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
        public OPR_RIGHT[] rightList;
        public UInt32 dwGroupNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
        public USER_GROUP_INFO[] groupList;
        public UInt32 dwUserNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 200)]
        public USER_INFO[] userList;
        /// <summary>
        /// 特殊信息:1.支持用户复用;0.不支持用户复用;
        /// </summary>
        public UInt32 dwSpecial;
    }

    /// <summary>
    /// 日志结构
    /// </summary>
    public struct DH_LOG_ITEM
    {
        /// <summary>
        /// 日期
        /// </summary>
        public NET_TIME time;
        /// <summary>
        /// 类型
        /// </summary>
        public UInt16 type;
        /// <summary>
        /// 保留
        /// </summary>
        public byte reserved;
        /// <summary>
        /// 数据
        /// </summary>
        public byte data;
        /// <summary>
        /// 内容
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public byte[] context;
    }


    /// <summary>
    /// 查询硬盘信息的返回数据结构
    /// </summary>
    public struct DH_HARDDISK_STATE
    {
        /// <summary>
        /// 硬盘个数
        /// </summary>
        public UInt32 dwDiskNum;
        /// <summary>
        /// 各硬盘信息
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public NET_DEV_DISKSTATE[] stDisks;
    }

    /// <summary>
    /// 音频数据的格式结构
    /// </summary>
    public struct DH_AUDIO_FORMAT
    {
        /// <summary>
        /// 编码类型,0-PCM
        /// </summary>
        public byte byFormatTag;
        /// <summary>
        /// 声道数
        /// </summary>
        public UInt16 nChannels;
        /// <summary>
        /// 采样深度
        /// </summary>
        public UInt16 wBitsPerSample;
        /// <summary>
        /// 采样率
        /// </summary>
        public UInt32 nSamplesPerSec;
    }

    /// <summary>
    /// 版本信息
    /// 关于时间的数据组织是:yyyymmdd
    /// </summary>
    public struct DH_VERSION_INFO
    {
        /// <summary>
        /// 版本号:高16位表示主版本号,低16位表示次版本号
        /// </summary>
        public UInt32 dwSoftwareVersion;
        /// <summary>
        /// 创建时间
        /// </summary>
        public UInt32 dwSoftwareBuildDate;
        /// <summary>
        /// DSP版本号
        /// </summary>
        public UInt32 dwDspSoftwareVersion;
        /// <summary>
        /// DSP版本创建时间
        /// </summary>
        public UInt32 dwDspSoftwareBuildDate;
        /// <summary>
        /// 面板版本
        /// </summary>
        public UInt32 dwPanelVersion;
        /// <summary>
        /// 面板软件创建日期
        /// </summary>
        public UInt32 dwPanelSoftwareBuildDate;
        /// <summary>
        /// 硬件版本
        /// </summary>
        public UInt32 dwHardwareVersion;
        /// <summary>
        /// 硬件制作日期
        /// </summary>
        public UInt32 dwHardwareDate;
        /// <summary>
        /// Web版本
        /// </summary>
        public UInt32 dwWebVersion;
        /// <summary>
        /// Web创建日期
        /// </summary>
        public UInt32 dwWebBuildDate;
    }



    /// <summary>
    /// DSP能力描述
    /// </summary>
    public struct DH_DSP_ENCODECAP
    {
        /// <summary>
        /// 视频制式掩码,按位表示设备能够支持的视频制式
        /// </summary>
        public UInt32 dwVideoStandardMask;
        /// <summary>
        /// 分辨率掩码,按位表示设备能够支持的分辨率设置
        /// </summary>
        public UInt32 dwImageSizeMask;
        /// <summary>
        /// 编码模式掩码,按位表示设备能够支持的编码模式设置
        /// </summary>
        public UInt32 dwEncodeModeMask;
        /// <summary>
        /// 按位表示设备支持的多媒体功能 第一位表示支持主码流,第二位表示支持辅码流1,第三位表示支持辅码流2,第四位表示支持jpg抓图
        /// </summary>
        public UInt32 dwStreamCap;
        /// <summary>
        /// 表示主码流为各分辨率时,支持的辅码流分辨率掩码
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public UInt32[] dwImageSizeMask_Assi;
        /// <summary>
        /// DSP 支持的最高编码能力
        /// </summary>
        public UInt32 dwMaxEncodePower;
        /// <summary>
        /// 每块 DSP 支持最多输入视频通道数 
        /// </summary>
        public UInt16 wMaxSupportChannel;
        /// <summary>
        /// DSP 每通道的最大编码设置是否同步 0-不同步, 1-同步
        /// </summary>
        public UInt16 wChannelMaxSetSync;
    }

    /// <summary>
    /// 设备信息配置
    /// </summary>
    public struct DHDEV_SYSTEM_ATTR_CFG
    {
        /// <summary>
        /// 
        /// </summary>
        public UInt32 dwSize;
        /*下面是设备的只读部分*/
        /// <summary>
        /// 版本
        /// </summary>
        public DH_VERSION_INFO stVersion;
        /// <summary>
        /// DSP能力描述
        /// </summary>
        public DH_DSP_ENCODECAP stDspEncodeCap;
        /// <summary>
        /// 序列号
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]
        public byte[] szDevSerialNo;
        /// <summary>
        /// 序列号转成字符串
        /// </summary>
        /// <returns></returns>
        public string DevSerialNo()
        {
            string result = "";
            foreach (byte bt in szDevSerialNo)
            {
                result += bt.ToString("D");
            }
            return result;
        }
        /// <summary>
        /// 设备类型,见枚举NET_DEVICE_TYPE
        /// </summary>
        public byte byDevType;
        /// <summary>
        /// 显示标准备的设备类型描述
        /// </summary>
        /// <returns></returns>
        public string DevType()
        {
            string result = "";
            switch (int.Parse(byDevType.ToString()))
            {
                case (int)NET_DEVICE_TYPE.NET_DVR_DDNS:
                    result = "DDNS服务器";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MEPG4_SH2:
                    result = "MPEG4视豪录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MEPG4_ST2:
                    result = "MPEG4视通录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MPEG1_2:
                    result = "MPEG1二路录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MPEG1_8:
                    result = "MPEG4八路录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MPEG4_16:
                    result = "MPEG4十六录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MPEG4_8:
                    result = "MPEG4八路录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MPEG4_GBE:
                    result = "MPEG4视通二代增强型录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MPEG4_NVSII:
                    result = "MPEG4网络视频服务器II代";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_MPEG4_SX2:
                    result = "MPEG4视新十六路录像机";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_NONREALTIME:
                    result = "非实时";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_NONREALTIME_MACE:
                    result = "非实时MACE";
                    break;
                case (int)NET_DEVICE_TYPE.NET_DVR_STD_NEW:
                    result = "新标准配置协议";
                    break;
                case (int)NET_DEVICE_TYPE.NET_NVS_MPEG1:
                    result = "网络视频服务器";
                    break;
                case (int)NET_DEVICE_TYPE.NET_PRODUCT_NONE:
                    result = "无";
                    break;
            }
            return result;
        }
        /// <summary>
        /// 设备详细型号,字符串格式,可能为空
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szDevType;
        /// <summary>
        /// 视频口数量
        /// </summary>
        public byte byVideoCaptureNum;
        /// <summary>
        /// 音频口数量
        /// </summary>
        public byte byAudioCaptureNum;
        /// <summary>
        /// NSP
        /// </summary>
        public byte byTalkInChanNum;
        /// <summary>
        /// NSP
        /// </summary>
        public byte byTalkOutChanNum;
        /// <summary>
        /// NSP
        /// </summary>
        public byte byDecodeChanNum;
        /// <summary>
        /// 报警输入口数
        /// </summary>
        public byte byAlarmInNum;
        /// <summary>
        /// 报警输出口数
        /// </summary>
        public byte byAlarmOutNum;
        /// <summary>
        /// 网络口数
        /// </summary>
        public byte byNetIONum;
        /// <summary>
        /// USB口数量
        /// </summary>
        public byte byUsbIONum;
        /// <summary>
        /// IDE数量
        /// </summary>
        public byte byIdeIONum;
        /// <summary>
        /// 串口数量
        /// </summary>
        public byte byComIONum;
        /// <summary>
        /// 并口数量
        /// </summary>
        public byte byLPTIONum;
        /// <summary>
        /// NSP
        /// </summary>
        public byte byVgaIONum;
        /// <summary>
        /// NSP
        /// </summary>
        public byte byIdeControlNum;
        /// <summary>
        /// NSP
        /// </summary>
        public byte byIdeControlType;
        /// <summary>
        /// NSP,扩展描述
        /// </summary>
        public byte byCapability;
        /// <summary>
        /// 视频矩阵输出口数
        /// </summary>
        public byte byMatrixOutNum;
        /*下面是设备的可写部分*/
        /// <summary>
        /// 硬盘满处理方式(覆盖、停止)
        /// </summary>
        public byte byOverWrite;
        /// <summary>
        /// 录像打包长度
        /// </summary>
        public byte byRecordLen;
        /// <summary>
        /// NSP
        /// </summary>
        public byte byStartChanNo;
        /// <summary>
        /// 设备编号,用于遥控
        /// </summary>
        public UInt16 wDevNo;
        /// <summary>
        /// 视频制式
        /// </summary>
        public byte byVideoStandard;
        /// <summary>
        /// 日期格式
        /// </summary>
        public byte byDateFormat;
        /// <summary>
        /// 日期分割符(0-".", 1-"-", 2-"/")
        /// </summary>
        public byte byDateSprtr;
        /// <summary>
        /// 时间格式 (0-24小时,1-12小时)
        /// </summary>
        public byte byTimeFmt;
        /// <summary>
        /// 保留字
        /// </summary>
        public byte byReserved;
    }

    /// <summary>
    /// 时间段结构  
    /// </summary>
    public struct DH_TSECT
    {
        public bool bEnable;
        public int iBeginHour;
        public int iBeginMin;
        public int iBeginSec;
        public int iEndHour;
        public int iEndMin;
        public int iEndSec;
    }

    /// <summary>
    /// 时间段结构[长度6]
    /// </summary>
    public struct DH_REC_TSECT
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public DH_TSECT[] sTSECT;
    }

    /// <summary>
    /// 区域:各边距按整长8192的比例 
    /// </summary>
    public struct DH_RECT
    {
        public int left;
        public int top;
        public int right;
        public int bottom;
    }

    /// <summary>
    /// OSD属性结构 
    /// </summary>
    public struct DH_ENCODE_WIDGET
    {
        /// <summary>
        /// 物件的前景RGB,和透明度  
        /// </summary>
        public UInt32 rgbaFrontground;
        /// <summary>
        /// 物件的后景RGB,和透明度 
        /// </summary>
        public UInt32 rgbaBackground;
        /// <summary>
        /// 位置  
        /// </summary>
        public DH_RECT rcRect;
        /// <summary>
        /// 物件显示
        /// </summary>
        public byte bShow;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved;
    }

    /// <summary>
    /// 通道音视频属性 
    /// </summary>
    public struct DH_VIDEOENC_OPT
    {
        //视频参数
        /// <summary>
        /// 视频使能:1-打开,0-关闭 
        /// </summary>
        public byte byVideoEnable;
        /// <summary>
        /// 码流控制,参照常量定义
        /// </summary>
        public byte byBitRateControl;
        /// <summary>
        /// 帧率
        /// </summary>
        public byte byFramesPerSec;
        /// <summary>
        /// 编码模式,参照常量定义 
        /// </summary>
        public byte byEncodeMode;
        /// <summary>
        /// 分辨率参,参照常量定义 
        /// </summary>
        public byte byImageSize;
        /// <summary>
        /// 档次1-6 
        /// </summary>
        public byte byImageQlty;
        /// <summary>
        /// 限码流参数, 范围:50~4*1024 (k)
        /// </summary>
        public UInt16 wLimitStream;

        //音频参数
        /// <summary>
        /// 音频使能:1-打开,0-关闭
        /// </summary>
        public byte byAudioEnable;
        /// <summary>
        /// 编码类型,如PCM
        /// </summary>
        public byte wFormatTag;
        /// <summary>
        /// 声道数
        /// </summary>
        public UInt16 nChannels;
        /// <summary>
        /// 采样深度	
        /// </summary>
        public UInt16 wBitsPerSample;
        /// <summary>
        /// 采样率
        /// </summary>
        public UInt32 nSamplesPerSec;
        /// <summary>
        /// 保留字
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] reserved;
    }

    /// <summary>
    /// 画面颜色属性
    /// </summary>
    public struct DH_COLOR_CFG
    {
        public DH_TSECT stSect;
        /// <summary>
        /// 亮度	0-100
        /// </summary>
        public byte byBrightness;
        /// <summary>
        /// 对比度	0-100
        /// </summary>
        public byte byContrast;
        /// <summary>
        /// 饱和度	0-100
        /// </summary>
        public byte bySaturation;
        /// <summary>
        /// 色度	0-100
        /// </summary>
        public byte byHue;
        /// <summary>
        /// 增益使能	  
        /// </summary>
        public byte byGainEn;
        /// <summary>
        /// 增益	0-100
        /// </summary>
        public byte byGain;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] byReserved;
    }



    /// <summary>
    /// 图像通道属性结构体
    /// </summary>
    public struct DHDEV_CHANNEL_CFG
    {
        public UInt32 dwSize;
        /// <summary>
        /// 
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szChannelName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szChannelName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public DH_VIDEOENC_OPT[] stMainVideoEncOpt;
        /// <summary>
        ///  通常指网传码流	
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public DH_VIDEOENC_OPT[] stAssiVideoEncOpt;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public DH_COLOR_CFG[] stColorCfg;
        public DH_ENCODE_WIDGET stTimeOSD;
        public DH_ENCODE_WIDGET stChannelOSD;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
        public DH_ENCODE_WIDGET[] stBlindCover;

        /// <summary>
        ///  区域遮盖开关,0x00不使能遮盖,0x01仅遮盖,设备本地预览,0x10仅遮盖录像(及网络预览),0x11都遮盖
        ///  </summary>
        public byte byBlindEnable;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved;
    }

    /// <summary>
    /// 预览图像参数
    /// </summary>
    public struct DHDEV_PREVIEW_CFG
    {
        public UInt32 dwSize;
        public DH_VIDEOENC_OPT stPreView;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public DH_COLOR_CFG[] stColorCfg;
    }

    /// <summary>
    /// 语音对讲音频属性
    /// </summary>
    public struct DHDEV_TALK_CFG
    {
        #region << 音频输入参数 >>
        /// <summary>
        /// 编码类型,如PCM
        /// </summary>
        public byte byInFormatTag;
        /// <summary>
        /// 声道数
        /// </summary>
        public byte byInChannels;
        /// <summary>
        /// 采样深度	
        /// </summary>
        public UInt16 wInBitsPerSample;
        /// <summary>
        /// 采样率
        /// </summary>
        public UInt32 dwInSamplesPerSec;

        #endregion

        #region << 音频输出参数 >>
        /// <summary>
        /// 编码类型,如PCM
        /// </summary>
        public byte byOutFormatTag;
        /// <summary>
        /// 声道数
        /// </summary>
        public byte byOutChannels;
        /// <summary>
        /// 采样深度
        /// </summary>
        public UInt16 wOutBitsPerSample;
        /// <summary>
        /// 采样率
        /// </summary>
        public UInt32 dwOutSamplesPerSec;
        #endregion

    }

    /// <summary>
    /// 定时录像
    /// </summary>
    public struct DHDEV_RECORD_CFG
    {

        public UInt32 dwSize;
        /// <summary>
        /// 时间段结构
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stSect;
        /// <summary>
        /// 预录时间,单位是s,0表示不预录 
        /// </summary>
        public byte byPreRecordLen;
        /// <summary>
        /// 录像冗余开关
        /// </summary>
        public byte byRedundancyEn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] byReserved;
    }

    /// <summary>
    /// 报警配置
    /// </summary>
    public struct DH_PTZ_LINK
    {
        public int iType;
        public int iValue;
    }

    /// <summary>
    /// 消息触发配置
    /// 消息处理方式,可以同时多种处理方式,包括
    /// 0x00000001 - 网络:上传管理服务器
    /// 0x00000002 - 录像:触发
    /// 0x00000004 - 云台联动
    /// 0x00000008 - 发送邮件
    /// 0x00000010 - 设备本地报警轮巡
    /// 0x00000020 - 设备提示使能
    /// 0x00000040 - 设备报警输出使能
    /// 0x00000080 - Ftp上传使能
    /// 0x00000100 - 蜂鸣
    /// 0x00000200 - 语音提示
    /// 0x00000400 - 抓图使能
    /// </summary>
    public struct DH_MSG_HANDLE
    {
        /// <summary>
        /// 当前报警所支持的处理方式,按位掩码表示
        /// </summary>
        public UInt32 dwActionMask;
        /// <summary>
        /// 触发动作,按位掩码表示,具体动作所需要的参数在各自的配置中体现
        /// </summary>
        public UInt32 dwActionFlag;
        /// <summary>
        /// 报警触发的输出通道,为 1 表示触发该输出
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] byRelAlarmOut;
        /// <summary>
        /// 报警持续时间
        /// </summary>
        public UInt32 dwDuration;
        /// <summary>
        /// 联动录像	, 报警触发的录像通道,为1表示触发该通道	
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] byRecordChannel;
        /// <summary>
        /// 录像持续时间 
        /// </summary>
        public UInt32 dwRecLatch;
        /// <summary>
        /// 抓图通道
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] bySnap;
        /// <summary>
        /// 轮巡通道
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] byTour;
        /// <summary>
        /// 云台联动
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_PTZ_LINK[] struPtzLink;
    }

    /// <summary>
    /// 外部报警
    /// </summary>
    public struct DH_ALARMIN_CFG
    {
        /// <summary>
        /// 报警器类型,0:常闭,1:常开  	
        /// </summary>
        public byte byAlarmType;
        /// <summary>
        /// 报警使能
        /// </summary>
        public byte byAlarmEn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] byReserved;
        /// <summary>
        /// NSP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stSect;
        /// <summary>
        /// 处理方式
        /// </summary>
        public DH_MSG_HANDLE struHandle;
    }

    /// <summary>
    /// 检测区域[长度16]
    /// </summary>
    public struct DH_DETECT
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] Detected;
    }

    /// <summary>
    /// 动态检测
    /// </summary>
    public struct DH_MOTION_DETECT_CFG
    {
        /// <summary>
        /// 动态检测报警使能
        /// </summary>
        public byte byMotionEn;

        public byte byReserved;
        /// <summary>
        /// 灵敏度
        /// </summary>
        public UInt16 wSenseLevel;
        /// <summary>
        /// 动态检测区域的行数
        /// </summary>
        public UInt16 wMotionRow;
        /// <summary>
        /// 动态检测区域的列数
        /// </summary>
        public UInt16 wMotionCol;
        /// <summary>
        /// 检测区域,共32*32块区域
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public DH_DETECT[] byDetected;
        /// <summary>
        /// NSP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stSect;
        /// <summary>
        /// 处理方式
        /// </summary>
        public DH_MSG_HANDLE struHandle;
    }

    /// <summary>
    /// 视频丢失报警
    /// </summary>
    public struct DH_VIDEO_LOST_CFG
    {
        /// <summary>
        /// 视频丢失报警使能
        /// </summary>
        public byte byAlarmEn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved;
        /// <summary>
        /// NSP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stSect;
        /// <summary>
        /// 处理方式
        /// </summary>
        public DH_MSG_HANDLE struHandle;
    }

    /// <summary>
    /// 图像遮挡报警
    /// </summary>
    public struct DH_BLIND_CFG
    {
        /// <summary>
        /// 使能
        /// </summary>
        public byte byBlindEnable;
        /// <summary>
        /// 灵敏度1-6 
        /// </summary>
        public byte byBlindLevel;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] byReserved;
        /// <summary>
        /// NSP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stSect;
        /// <summary>
        /// 处理方式
        /// </summary>
        public DH_MSG_HANDLE struHandle;
    }

    /// <summary>
    /// 硬盘消息(内部报警)
    /// </summary>
    public struct DH_DISK_ALARM_CFG
    {
        /// <summary>
        /// 无硬盘时报警
        /// </summary>
        public byte byNoDiskEn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved_1;
        /// <summary>
        /// NSP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stNDSect;
        /// <summary>
        /// 处理方式 
        /// </summary>
        public DH_MSG_HANDLE struNDHandle;
        /// <summary>
        /// 硬盘低容量时报警
        /// </summary>
        public byte byLowCapEn;
        /// <summary>
        /// 容量阀值 0-99
        /// </summary>
        public byte byLowerLimit;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] byReserved_2;
        /// <summary>
        /// NSP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stLCSect;
        /// <summary>
        /// 处理方式  
        /// </summary>
        public DH_MSG_HANDLE struLCHandle;
        /// <summary>
        /// 硬盘故障报警
        /// </summary>
        public byte byDiskErrEn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved_3;
        /// <summary>
        /// NSP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public DH_REC_TSECT[] stEDSect;
        /// <summary>
        /// 处理方式 
        /// </summary>
        public DH_MSG_HANDLE struEDHandle;
    }

    public struct DH_NETBROKEN_ALARM_CFG
    {
        public byte byEnable;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved;
        public DH_MSG_HANDLE struHandle;
    }

    /// <summary>
    /// 报警布防
    /// </summary>
    public struct DHDEV_ALARM_SCHEDULE
    {
        public UInt32 dwSize;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_ALARMIN_CFG[] struLocalAlmIn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_ALARMIN_CFG[] struNetAlmIn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_MOTION_DETECT_CFG[] struMotion;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_VIDEO_LOST_CFG[] struVideoLost;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_BLIND_CFG[] struBlind;
        public DH_DISK_ALARM_CFG struDiskAlarm;
        public DH_NETBROKEN_ALARM_CFG struNetBrokenAlarm;
    }

    /// <summary>
    /// 以太网配置
    /// </summary>
    public struct DH_ETHERNET
    {
        /// <summary>
        /// DVR IP 地址  
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sDevIPAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sDevIPAddr;
        /// <summary>
        /// DVR IP 地址掩码
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sDevIPMask;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sDevIPMask;
        /// <summary>
        ///  网关地址   
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sGatewayIP;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sGatewayIP;
        /// <summary>
        /// NSP
        /// 10M/100M  自适应,索引 
        /// 1-10MBase - T
        /// 2-10MBase-T 全双工 
        /// 3-100MBase - TX
        /// 4-100M 全双工
        /// 5-10M/100M  自适应 
        /// </summary>
        public UInt32 dwNetInterface;
        /// <summary>
        /// MAC地址,只读   
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 40)]
        //public char[] byMACAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
        public byte[] byMACAddr;
    }

    /// <summary>
    /// 远程主机配置
    /// </summary>
    public struct DH_REMOTE_HOST
    {
        /// <summary>
        /// 连接使能
        /// </summary>
        public byte byEnable;
        public byte byReserved;
        /// <summary>
        /// 远程主机端口
        /// </summary>
        public UInt16 wHostPort;
        /// <summary>
        /// 远程主机 IP 地址
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sHostIPAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sHostIPAddr;
        /// <summary>
        /// 远程主机 用户名
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 64)]
        //public char[] sHostUser;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public byte[] sHostUser;
        /// <summary>
        /// 远程主机 密码
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] sHostPassword;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] sHostPassword;
    }

    /// <summary>
    /// 邮件配置
    /// </summary>
    public struct DH_MAIL_CFG
    {
        /// <summary>
        /// 邮件服务器IP地址
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sMailIPAddr;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        public byte[] sMailIPAddr;

        /// <summary>
        /// 邮件服务器端口
        /// </summary>
        public UInt16 wMailPort;
        /// <summary>
        /// 保留
        /// </summary>
        public UInt16 wReserved;
        /// <summary>
        /// 发送地址
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        //public char[] sSenderAddr;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        public byte[] sSenderAddr;
        /// <summary>
        /// 用户名 
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sUserName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sUserName;
        / <summary>
        / 用户名的字符串
        / </summary>
        / <returns></returns>
        //public string UserName()
        //{
        //    string result = "";
        //    foreach (char chr in sUserName)
        //    {
        //        if (chr != '\0')
        //        {
        //            result += chr.ToString();
        //        }
        //    }
        //    return result;
        //}
        /// <summary>
        /// 用户密码
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sUserPsw;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sUserPsw;

        / <summary>
        / 用户密码的字符串
        / </summary>
        / <returns></returns>
        //public string UserPsw()
        //{
        //    string result = "";
        //    foreach (char chr in sUserPsw)
        //    {
        //        if (chr != '\0')
        //        {
        //            result += chr.ToString();
        //        }
        //    }
        //    return result;
        //}

        /// <summary>
        /// 目的地址
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        //public char[] sDestAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] sDestAddr;
        /// <summary>
        /// 抄送地址
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        //public char[] sCcAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] sCcAddr;
        /// <summary>
        /// 抄送地址的字符串
        /// </summary>
        /// <returns></returns>
        public string CcAddr()
        {
            string result = "";
            foreach (char chr in sCcAddr)
            {
                if (chr != '\0')
                {
                    result += chr.ToString();
                }
            }
            return result;
        }
        /// <summary>
        /// 暗抄地址
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        //public char[] sBccAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] sBccAddr;
        /// <summary>
        /// 暗抄地址的字符串
        /// </summary>
        /// <returns></returns>
        public string BccAddr()
        {
            string result = "";
            foreach (char chr in sBccAddr)
            {
                if (chr != '\0')
                {
                    result += chr.ToString();
                }
            }
            return result;
        }
        /// <summary>
        /// 标题
        /// </summary>        
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 64)]
        //public char[] sSubject;        
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public byte[] sSubject;
        /// <summary>
        /// 标题的字符串
        /// </summary>
        /// <returns></returns>
        public string Subject()
        {
            string result = "";
            foreach (byte chr in sSubject)
            {
                if (chr != '\0')
                {
                    result += (char)chr;
                }
            }
            return result;
        }
    }

    /// <summary>
    /// 网络配置结构体
    /// </summary>
    public struct DHDEV_NET_CFG
    {
        public UInt32 dwSize;
        /// <summary>
        /// 设备主机名
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sDevName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sDevName;
        /// <summary>
        /// 设备主机名的字符串表达
        /// </summary>
        /// <returns>主机名的字符串</returns>
        public string DevName()
        {
            string result = "";
            foreach (char chr in sDevName)
            {
                if (chr != '\0')
                {
                    result += chr.ToString();
                }
            }
            return result;
        }
        /// <summary>
        /// TCP最大连接数(一般指视频数据请求数) 
        /// </summary>
        public UInt16 wTcpMaxConnectNum;
        /// <summary>
        /// TCP帧听端口
        /// </summary>
        public UInt16 wTcpPort;
        /// <summary>
        /// UDP侦听端口
        /// </summary>
        public UInt16 wUdpPort;
        /// <summary>
        /// HTTP端口号 
        /// </summary>
        public UInt16 wHttpPort;
        /// <summary>
        /// HTTPS端口号 
        /// </summary>
        public UInt16 wHttpsPort;
        /// <summary>
        /// SSL端口号
        /// </summary>
        public UInt16 wSslPort;
        /// <summary>
        /// 以太网口
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public DH_ETHERNET[] stEtherNet;
        /// <summary>
        /// 报警服务器
        /// </summary>
        public DH_REMOTE_HOST struAlarmHost;
        /// <summary>
        /// 日志服务器 
        /// </summary>
        public DH_REMOTE_HOST struLogHost;
        /// <summary>
        /// SMTP服务器
        /// </summary>
        public DH_REMOTE_HOST struSmtpHost;
        /// <summary>
        /// 多播组
        /// </summary>
        public DH_REMOTE_HOST struMultiCast;
        /// <summary>
        /// NFS服务器
        /// </summary>
        public DH_REMOTE_HOST struNfs;
        /// <summary>
        /// PPPoE服务器
        /// </summary>
        public DH_REMOTE_HOST struPppoe;
        /// <summary>
        /// PPPoE注册返回的IP
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] sPppoeIP;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] sPppoeIP;
        /// <summary>
        /// DDNS服务器
        /// </summary>
        public DH_REMOTE_HOST struDdns;
        /// <summary>
        /// DDNS主机名
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 64)]
        //public char[] sDdnsHostName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public byte[] sDdnsHostName;
        /// <summary>
        /// DNS服务器
        /// </summary>
        public DH_REMOTE_HOST struDns;
        /// <summary>
        /// 邮件配置
        /// </summary>
        public DH_MAIL_CFG struMail;
    }

    /// <summary>
    /// 串口基本属性
    /// </summary>
    public struct DH_COMM_PROP
    {
        /// <summary>
        /// 数据位 0:5;1:6;2:7;3-8;
        /// </summary>
        public byte byDataBit;
        /// <summary>
        /// 停止位 0:1位;1:1.5位; 2:2位;
        /// </summary>
        public byte byStopBit;
        /// <summary>
        /// 校验位 0:不校验;1:奇校验; 2:偶校验;
        /// </summary>
        public byte byParity;
        /// <summary>
        /// 波特率 0:300;1:600;2:1200;3:2400;4:4800;5:9600;6:19200;7:38400;8:57600;9:115200;
        /// </summary>
        public byte byBaudRate;
    }

    /// <summary>
    /// 485解码器配置
    /// </summary>
    public struct DH_485_CFG
    {
        public DH_COMM_PROP struComm;
        /// <summary>
        /// 协议类型 保存协议的下标,动态变化
        /// </summary>
        public UInt16 wProtocol;
        /// <summary>
        /// 解码器地址:0 - 255
        /// </summary>
        public UInt16 wDecoderAddress;
    }

    /// <summary>
    /// 232串口配置
    /// </summary>
    public struct DH_RS232_CFG
    {
        public DH_COMM_PROP struComm;
        public byte byFunction;			// 串口功能,对应串口配置取到的功能名列表 

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved;
    }


    /// <summary>
    /// 协议名
    /// </summary>
    public struct DH_PROANDFUN_NAME
    {
        /// <summary>
        /// 协议名[长度16]
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] ProName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] ProName;
    }


    /// <summary>
    /// 串口配置结构体
    /// </summary>
    public struct DHDEV_COMM_CFG
    {
        /// <summary>
        /// 解码器协议
        /// </summary>
        public UInt32 dwSize;
        /// <summary>
        /// 协议个数
        /// </summary>
        public UInt32 dwDecProListNum;
        /// <summary>
        /// 协议名列表100
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
        public DH_PROANDFUN_NAME[] DecProName;
        /// <summary>
        /// 各解码器当前属性
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_485_CFG[] stDecoder;
        /// <summary>
        /// 232功能个数
        /// </summary>
        public UInt32 dw232FuncNameNum;
        /// <summary>
        /// 功能名列表10*16
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 10)]
        public DH_PROANDFUN_NAME[] s232FuncName;
        /// <summary>
        /// 各232串口当前属性
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public DH_RS232_CFG[] st232;
    }

    /// <summary>
    /// 自动维护属性
    /// </summary>
    public struct DHDEV_AUTOMT_CFG
    {
        /// <summary>
        /// 自动重启
        /// </summary>
        public UInt32 dwSize;
        /// <summary>
        ///  自动重启日期设定 0:从不;1:每天;2:每星期日;3:每星期一;......
        /// </summary>
        public byte byAutoRebootDay;
        /// <summary>
        /// 自动重启时间设定 0:0:00;1:1:00;........23:23:00;
        /// </summary>
        public byte byAutoRebootTime;
        /// <summary>
        /// 自动删除文件 0:从不;1:24H;2:48H;3:72H;4:96H:5:一周;6:一月
        /// </summary>
        public byte byAutoDeleteFilesTime;
        /// <summary>
        /// 保留位
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 13)]
        public byte[] reserved;
    }

    /// <summary>
    /// 本机控制策略配置
    /// </summary>
    public struct DH_VIDEOGROUP_CFG
    {
        /// <summary>
        /// 视频输出 0:无效;1:设备通道数表示对应通道;设备通道数+1代表all;
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public byte[] byVideoOut;
        /// <summary>
        /// 轮巡间隔,单位秒, 5-300 
        /// </summary>
        public int iInterval;
        /// <summary>
        /// 是否轮巡 
        /// </summary>
        public byte byEnableTour;
        /// <summary>
        /// 联动报警通道 0:无效;1:报警通道数表示对应通道;报警通道数+1代表1-4;报警通道数+2代表5-8...;参考本地界面
        /// </summary>
        public byte byAlarmChannel;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] byReserved;
    }

    /// <summary>
    /// 本机矩阵控制策略配置
    /// </summary>
    public struct DHDEV_VIDEO_MATRIX_CFG
    {
        public UInt32 dwSize;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public DH_VIDEOGROUP_CFG[] struVideoGroup;
    }

    /// <summary>
    /// ddns配置
    /// </summary>
    public struct DH_DDNS_SERVER_CFG
    {
        /// <summary>
        /// ddns服务器id号
        /// </summary>
        public UInt32 dwId;
        /// <summary>
        /// 使能,同一时间只能有一个ddns服务器处于使能状态
        /// </summary>
        public bool bEnable;
        /// <summary>
        /// 服务器类型,希网..
        /// </summary>	
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szServerType;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szServerType;
        /// <summary>
        /// 服务器ip
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] szServerIp;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] szServerIp;
        /// <summary>
        /// 服务器端口
        /// </summary>
        public UInt32 dwServerPort;
        /// <summary>
        /// dvr域名如jecke.3322.org
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 256)]
        //public char[] szDomainName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public byte[] szDomainName;
        /// <summary>
        /// 用户名
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szUserName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szUserName;
        /// <summary>
        /// 密码
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szUserPsw;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szUserPsw;
        /// <summary>
        /// 服务器别名,如"dahua ddns"
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szAlias;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szAlias;
    }
    /// <summary>
    /// 多ddns配置
    /// </summary>
    public struct DHDEV_MULTI_DDNS_CFG
    {
        public UInt32 dwSize;
        public UInt32 dwDdnsServerNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
        public DH_DDNS_SERVER_CFG[] struDdnsServer;
    }

    /// <summary>
    /// 抓图功能配置
    /// </summary>
    public struct DHDEV_SNAP_CFG
    {
        public UInt32 dwSize;
        /// <summary>
        /// 定时抓图开关(报警抓图开关在各报警联动配置中体现)
        /// </summary>
        public byte bTimingEnable;
        public byte bReserved;
        /// <summary>
        /// 定时抓图时间间隔,单位为秒,目前设备支持最大的抓图时间间隔为30分钟
        /// </summary>
        public ushort PicTimeInterval;
        /// <summary>
        /// 抓图编码配置,现支持其中的分辨率、画质、帧率设置,帧率在这里是负数,表示一秒抓图的次数。
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public DH_VIDEOENC_OPT[] struSnapEnc;
    }

    /// <summary>
    /// web路径配置
    /// </summary>
    public struct DHDEV_URL_CFG
    {
        public UInt32 dwSize;
        /// <summary>
        /// 是否抓图
        /// </summary>
        public bool bSnapEnable;
        /// <summary>
        /// 抓图周期
        /// </summary>
        public int iSnapInterval;
        /// <summary>
        /// HTTP主机IP
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] szHostIp;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] szHostIp;
        public UInt16 wHostPort;
        /// <summary>
        /// 状态消息发送间隔
        /// </summary>
        public int iMsgInterval;
        /// <summary>
        /// 状态消息上传URL
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        //public char[] szUrlState;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] szUrlState;
        /// <summary>
        /// 图片上传URL
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 128)]
        //public char[] szUrlImage;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public byte[] szUrlImage;
        /// <summary>
        /// 机器的web编号
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 48)]
        //public char[] szDevId;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]
        public byte[] szDevId;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] byReserved;
    }


    /// <summary>
    /// 
    /// </summary>
    public struct struPeriod
    {
        /// <summary>
        /// 该时间段内的“使能”无效,可忽略
        /// </summary>
        public DH_TSECT struSect;
        /// <summary>
        /// 上传动态检测录像
        /// </summary>
        public bool bMdEn;
        /// <summary>
        /// 上传外部报警录像
        /// </summary>
        public bool bAlarmEn;
        /// <summary>
        /// 上传普通定时录像
        /// </summary>	
        public bool bTimerEn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public UInt32[] dwRev;
    }
    /// <summary>
    /// FTP上传配置
    /// </summary>
    public struct DH_FTP_UPLOAD_CFG
    {

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public struPeriod[] Period;
    }

    /// <summary>
    /// FTP上传配置
    /// </summary>
    public struct DHDEV_FTP_PROTO_CFG
    {
        public UInt32 dwSize;

        /// <summary>
        /// 是否启用
        /// </summary>
        public bool bEnable;
        /// <summary>
        /// 主机IP
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] szHostIp;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] szHostIp;
        /// <summary>
        /// 主机端口
        /// </summary>
        public UInt32 wHostPort;
        /// <summary>
        /// FTP目录路径
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 240)]
        //public char[] szDirName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 240)]
        public byte[] szDirName;
        /// <summary>
        /// 用户名
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 64)]
        //public char[] szUserName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public byte[] szUserName;
        /// <summary>
        /// 密码
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 64)]
        //public char[] szPassword;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        public byte[] szPassword;
        /// <summary>
        /// 文件长度
        /// </summary>
        public int iFileLen;
        /// <summary>
        /// 相邻文件时间间隔
        /// </summary>
        public int iInterval;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)]
        public DH_FTP_UPLOAD_CFG[] struUploadCfg;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 130)]
        public byte[] reserved;
    }

    /// <summary>
    /// 平台接入配置 - U网通平台
    /// </summary>
    public struct DH_INTERVIDEO_UCOM_CHN_CFG
    {
        public bool bChnEn;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szChnId;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szChnId;
    }

    /// <summary>
    /// 平台接入配置 - U网通平台
    /// </summary>
    public struct DHDEV_INTERVIDEO_UCOM_CFG
    {
        public UInt32 dwSize;
        /// <summary>
        /// 接入功能使能与否 0:使能
        /// </summary>
        public bool bFuncEnable;
        /// <summary>
        /// 心跳使能与否
        /// </summary>
        public bool bAliveEnable;
        /// <summary>
        /// 心跳周期,单位秒,0-3600
        /// </summary>
        public UInt32 dwAlivePeriod;
        /// <summary>
        /// CMS的IP
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] szServerIp;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] szServerIp;
        /// <summary>
        /// CMS的Port
        /// </summary>
        public UInt16 wServerPort;
        /// <summary>
        /// 注册密码
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 16)]
        //public char[] szRegPwd;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] szRegPwd;
        /// <summary>
        /// 设备id
        /// </summary>
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szDeviceId;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szDeviceId;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szUserName;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szUserName;
        //[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.ByValTStr, SizeConst = 32)]
        //public char[] szPassWord;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szPassWord;
        /// <summary>
        /// 通道id,en
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public DH_INTERVIDEO_UCOM_CHN_CFG[] struChnInfo;
    }


    // IP信息扩展
    public struct DHDEV_IPIFILTER_INFO_EX
    {
        /// <summary>
        /// IP个数
        /// </summary>
        public UInt32 dwIPNum;
        /// <summary>
        /// IP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512 * 16)]
        public byte[] SZIP;
        /// <summary>
        /// 保留
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] byReserve;
    } ;

    // IP过滤配置结构体扩展
    public struct DHDEV_IPIFILTER_CFG_EX
    {
        public UInt32 dwSize;
        /// <summary>
        /// 使能
        /// </summary>
        public UInt32 dwEnable;
        /// <summary>
        /// 当前名单类型:0:白名单 1:黑名单(设备只能使一种名单生效,或者是白名单或者是黑名单)
        /// </summary>
        public UInt32 dwType;
        /// <summary>
        /// 黑名单
        /// </summary>
        public DHDEV_IPIFILTER_INFO_EX BannedIP;
        /// <summary>
        /// 白名单
        /// </summary>
        public DHDEV_IPIFILTER_INFO_EX TrustIP;
        /// <summary>
        /// 保留
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public byte[] byReserve;
    }


    // MAC,IP过滤信息
    public struct MACIP_INFO
    {
        /// <summary>
        /// 使用时,用初始化为本结构体大小
        /// </summary>
        public UInt32 dwSize;
        /// <summary>
        /// MAC
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
        public byte[] szMac;
        /// <summary>
        /// IP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] szIp;
    }

    // MAC,IP过滤配置结构体
    public struct DHDEV_MACIPFILTER_CFG
    {
        /// <summary>
        /// 使用时,用初始化为本结构体大小
        /// </summary>
        public UInt32 dwSize;
        /// <summary>
        /// 使能
        /// </summary>
        public UInt32 dwEnable;
        /// <summary>
        /// 当前名单类型:0:白名单 1:黑名单(设备只能使一种名单生效,或者是白名单或者是黑名单)
        /// </summary>
        public UInt32 dwType;
        /// <summary>
        /// 黑名单MAC,IP个数(MAC,IP一一对应)
        /// </summary>
        public UInt32 dwBannedMacIpNum;
        /// <summary>
        /// 黑名单Mac,IP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
        public MACIP_INFO[] stuBannedMacIp;
        /// <summary>
        /// 白名单MAC,IP个数(MAC,IP一一对应)
        /// </summary>
        public UInt32 dwTrustMacIpNum;
        /// <summary>
        /// 白名单Mac,IP
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
        public MACIP_INFO[] stuTrustMacIp;
    }

    /// <summary>
    /// 具体密钥信息36个字节
    /// </summary>
    public struct ENCRYPT_KEY_INFO
    {
        /// <summary>
        /// 是否加密0:不加密, 1:加密
        /// </summary>
        public byte byEncryptEnable;
        /// <summary>
        /// 保留
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved;
        /// <summary>
        /// union
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] byKey;
        //public ENCRYPT_TYPE_UNION  stuEncryptTypeUinon;
    }


    /// <summary>
    /// 加密算法参数
    /// </summary>
    public struct ALGO_PARAM_INFO
    {
        /// <summary>
        /// 密钥长度,当前为AES算法类型时,表示密钥位数(目前支持128,192,256位三种, 
        /// 如: wEncryptLenth为128,则密钥信息ENCRYPT_KEY_INFO里的byAesKey[0]~[15])
        /// 为DES算法类型时,密钥长度固定为64位
        /// 为3DES算法类型时,表示密钥的个数(2或3个密钥)
        /// </summary>
        public UInt16 wEncryptLenth;
        /// <summary>
        /// 工作模式,参考枚举类型 EM_ENCRYPT_ALOG_WORKMODE 
        /// </summary>
        public byte byAlgoWorkMode;
        /// <summary>
        /// 保留字段
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 13)]
        public byte[] reserved;
    }

    /// <summary>
    /// 码流加密配置信息 
    /// </summary>
    public struct DHEDV_STREAM_ENCRYPT
    {
        /// <summary>
        /// 加密算法类型:00: AES、01:DES、02: 3DES
        /// </summary>
        public byte byEncrptAlgoType;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] byReserved1;
        /// <summary>
        /// 加密算法参数
        /// </summary>
        public ALGO_PARAM_INFO stuEncrptAlgoparam;
        /// <summary>
        /// 各通道的密钥信息
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public ENCRYPT_KEY_INFO[] stuEncryptKeys;
        /// <summary>
        /// 保留
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1388)]
        public byte[] reserved2;
    }

    #endregion

    #region <<物体的检测模块配置--相关结构体>>

    /// <summary>
    /// 区域顶点信息
    /// </summary>
    public struct CFG_POLYGON
    {
        public Int32 nX; //0~8191
        public Int32 nY;
    }

    /// <summary>
    /// Size
    /// </summary>
    [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Auto)]
    public struct CFG_SIZE
    {
        /// <summary>
        /// 宽或面积(C++中是用union表示的)
        /// </summary>
        [FieldOffset(0)]
        public float nWidth;
        [FieldOffset(0)]
        public float nArea;
        /// <summary>
        /// 高
        /// </summary>
        [FieldOffset(4)]
        public float nHeight;

    }

    /// <summary>
    /// 区域信息
    /// </summary>
    public struct CFG_REGION
    {
        public Int32 nPointNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
        public CFG_POLYGON[] stuPolygon;
    }

    /// <summary>
    /// 校准框信息
    /// </summary>
    public struct CFG_CALIBRATEBOX_INFO
    {
        /// <summary>
        /// 校准框中心点坐标(点的坐标归一化到[0,8191]区间)
        /// </summary>
        public CFG_POLYGON stuCenterPoint;
        /// <summary>
        /// 相对基准校准框的比率(比如1表示基准框大小,0.5表示基准框大小的一半)
        /// </summary>
        public float fRatio;
    }

    /// <summary>
    /// 尺寸过滤器
    /// </summary>
    public struct CFG_SIZEFILTER_INFO
    {
        /// <summary>
        /// 校准框个数
        /// </summary>
        public Int32 nCalibrateBoxNum;
        /// <summary>
        /// 校准框(远端近端标定模式下有效)
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
        public CFG_CALIBRATEBOX_INFO[] stuCalibrateBoxs;
        /// <summary>
        /// 计量方式参数是否有效
        /// </summary>
        public byte bMeasureModeEnable;
        /// <summary>
        /// 计量方式,0-像素,不需要远端、近端标定, 1-实际长度,单位:米, 2-远端近端标定后的像素
        /// </summary>
        public byte bMeasureMode;
        /// <summary>
        /// 过滤类型参数是否有效
        /// </summary>
        public byte bFilterTypeEnable;
        // ByArea,ByRatio仅作兼容,使用独立的ByArea和ByRatio选项代替 2012/03/06
        /// <summary>
        /// 过滤类型:0:"ByLength",1:"ByArea", 2"ByWidthHeight"
        /// </summary>
        public byte bFilterType;
        /// <summary>
        /// 保留字段
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] bReserved;
        /// <summary>
        /// 物体最小尺寸参数是否有效
        /// </summary>
        public byte bFilterMinSizeEnable;
        /// <summary>
        /// 物体最大尺寸参数是否有效
        /// </summary>
        public byte bFilterMaxSizeEnable;
        /// <summary>
        /// 物体最小尺寸 "ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效(远端近端标定模式下表示基准框的宽高尺寸)。
        /// </summary>
        public CFG_SIZE stuFilterMinSize;
        /// <summary>
        /// 物体最大尺寸 "ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效(远端近端标定模式下表示基准框的宽高尺寸)。
        /// </summary>
        public CFG_SIZE stuFilterMaxSize;

        public byte abByArea;
        public byte abMinArea;
        public byte abMaxArea;
        public byte abMinAreaSize;
        public byte abMaxAreaSize;
        /// <summary>
        /// 是否按面积过滤 通过能力ComplexSizeFilter判断是否可用
        /// </summary>
        public byte bByArea;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] bReserved1;
        /// <summary>
        /// 最小面积
        /// </summary>
        public Int32 nMinArea;
        /// <summary>
        /// 最大面积
        /// </summary>
        public Int32 nMaxArea;
        /// <summary>
        /// 最小面积矩形框尺寸 "计量方式"为"像素"时,表示最小面积矩形框的宽高尺寸;"计量方式"为"远端近端标定模式"时,表示基准框的最小宽高尺寸;
        /// </summary>
        public CFG_SIZE stuMinAreaSize;
        /// <summary>
        /// 最大面积矩形框尺寸, 同上
        /// </summary>
        public CFG_SIZE stuMaxAreaSize;

        public byte abByRatio;
        public byte abMinRatio;
        public byte abMaxRatio;
        public byte abMinRatioSize;
        public byte abMaxRatioSize;
        /// <summary>
        /// 是否按宽高比过滤 通过能力ComplexSizeFilter判断是否可用
        /// </summary>
        public byte bByRatio;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] bReserved2;
        /// <summary>
        /// 最小宽高比
        /// </summary>
        public double dMinRatio;
        /// <summary>
        /// 最大宽高比
        /// </summary>
        public double dMaxRatio;
        /// <summary>
        /// 最小宽高比矩形框尺寸,最小宽高比对应矩形框的宽高尺寸。
        /// </summary>
        public CFG_SIZE stuMinRatioSize;
        /// <summary>
        /// 最大宽高比矩形框尺寸,同上
        /// </summary>
        public CFG_SIZE stuMaxRatioSize;
        /// <summary>
        /// 面积校准框个数
        /// </summary>
        public Int32 nAreaCalibrateBoxNum;
        /// <summary>
        /// 面积校准框
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
        public CFG_CALIBRATEBOX_INFO[] stuAreaCalibrateBoxs;
        /// <summary>
        /// 宽高校准框个数
        /// </summary>
        public Int32 nRatioCalibrateBoxs;
        /// <summary>
        ///  宽高校准框个数
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
        public CFG_CALIBRATEBOX_INFO[] stuRatioCalibrateBoxs;
        /// <summary>
        /// 长宽过滤使能参数是否有效
        /// </summary>
        public byte abBySize;
        /// <summary>
        /// 长宽过滤使能
        /// </summary>
        public byte bBySize;
    };

    // 各种物体特定的过滤器
    public struct CFG_OBJECT_SIZEFILTER_INFO
    {
        /// <summary>
        /// 物体类型
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst =
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值