private void panel_LoginDevice(object sender, EventArgs e)
        {
            LPNET_DVR_DEVICEINFO lpDeviceInfo = new LPNET_DVR_DEVICEINFO();

            IntPtr ptr = MP4Net_ClientLogin(deviceInf.IP, deviceInf.Port, deviceInf.UserName,
                                               deviceInf.Password, null, ref lpDeviceInfo);

            deviceInf.UserID = ptr.ToInt32();
        }
        /// <summary>
        /// 注册用户到硬盘录像机上
        /// </summary>
        /// <param name="DVRIp">硬盘录像机的IP 地址.</param>
        /// <param name="DVRPort">硬盘录像机的端口号.</param>
        /// <param name="username">登录的用户名.</param>
        /// <param name="password">用户密码.</param>
        /// <param name="lpinfo">指向DEVICEINFO 结构的指针.</param>
        /// <returns>-1 表示失败,其他值表示返回用户的ID 值,该ID 值是由SDK 分配,每个ID 值在客户端是唯一的。</returns>
        public int DeviceLogin(string DVRIp, ushort DVRPort, string username, string password, ref SDKPlugInData.DEVICEINFO lpinfo, string servername)
        {
            LPNET_DVR_DEVICEINFO lpDeviceInfo = new LPNET_DVR_DEVICEINFO();

            IntPtr obj = MP4Net_ClientLogin(DVRIp, DVRPort, username, password, null, ref lpDeviceInfo);

            if (Convert.ToInt32(obj.ToInt32()) != -1)
            {
                //hashtable_obj.Add(Convert.ToInt32(obj.ToInt32()), obj);
                hashtable_ip.Add(Convert.ToInt32(obj.ToInt32()), DVRIp);
                hashtable_username.Add(Convert.ToInt32(obj.ToInt32()), username);
                hashtable_password.Add(Convert.ToInt32(obj.ToInt32()), password);

                IntPtr intPtr = IntPtr.Zero;
                try
                {
                    uint lpBytesReturned = 0;
                    intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(new HY_DVS_DEVICE_INFO()));
                    if (MP4Net_ClientGetDeviceConfig(obj, HY_DVR_GET_DEVICE_INFO, 0, intPtr, (ushort)Marshal.SizeOf(new HY_DVS_DEVICE_INFO()), ref lpBytesReturned))
                    {
                        HY_DVS_DEVICE_INFO info = (HY_DVS_DEVICE_INFO)Marshal.PtrToStructure(intPtr, typeof(HY_DVS_DEVICE_INFO));
                        lpinfo.sSerialNumber = info.sSerialNumber;
                        lpinfo.byAlarmInPortNum = info.byAlarmInPortNum;
                        lpinfo.byAlarmOutPortNum = info.byAlarmOutPortNum;
                        lpinfo.byDVRType = info.byDVRType;
                        isDVR = false;
                        lpinfo.byDiskNum = info.byDiskNum;
                        lpinfo.byChanNum = info.byChanNum;
                    }
                    else
                    {
                        intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(new HY_DVR_DEVICE_INFO()));
                        if (MP4Net_ClientGetDeviceConfig(obj, HY_DVR_GET_DEVICE_INFO, 0, intPtr, (ushort)Marshal.SizeOf(new HY_DVR_DEVICE_INFO()), ref lpBytesReturned))
                        {
                            HY_DVR_DEVICE_INFO info = (HY_DVR_DEVICE_INFO)Marshal.PtrToStructure(intPtr, typeof(HY_DVR_DEVICE_INFO));
                            lpinfo.sSerialNumber = info.sSerialNumber;
                            lpinfo.byAlarmInPortNum = info.byAlarmInPortNum;
                            lpinfo.byAlarmOutPortNum = info.byAlarmOutPortNum;
                            lpinfo.byDVRType = info.byDVRType;
                            isDVR = true;
                            lpinfo.byDiskNum = info.byDiskNum;
                            lpinfo.byChanNum = info.byChanNum;
                        }
                    }
                }
                finally
                {
                    Marshal.FreeHGlobal(intPtr);
                }

            }

            return Convert.ToInt32(obj.ToInt32());
        }
 private static extern IntPtr MP4Net_ClientLogin(string sDVRIP, ushort wDVRPort, string sUserName, string sPassword, string mac, ref LPNET_DVR_DEVICEINFO lpDeviceInfo);