C# 海康DVR客户端开发系列(2)—— 封装API

简介:
前言

  从上篇文章(10月4日)到本篇文章截止到今天(10月22日)一直在做这个SDK翻译工作,耗时2周半,代码超过1万行,约有三分之二的行数是注释。由于工作忙也只能一天抽出那么半个小时一个小时来整理,所以对关注此系列文章的朋友说句:“抱歉,让大家久等了”。

  临时决定本系列使用WPF来做例子(买了一本WPF没读 - - #,所以......),藉此学习下WPF,也进一步熟悉.Net Framework 3.5,落伍的“老兵”奋起追击下相对于“老兵”而言的新技术 :)   

  其实这篇文章在10月22日就写好了,但是想和视频预览文章一起发布,比较麻烦的是我这边朋友的DVR一直不稳定,一直拖延到今天还是不行,所以还是把本文先发了。因此寻求能提供DVR设备的厂家或者提供DVR远程访问地址的朋友,以支持此系列能顺利的完成,在这里先谢谢了!我的联系方式:13811821337、over140@gmail.com



提醒
  欢迎转载,但请保留 博客园 (www.cnblogs.com)、 农民伯伯 (over140.cnblogs.com)的出处,谢谢合作:)


系列
  1.   C# 海康DVR客户端开发系列(1)——准备
  2.   C# 海康DVR客户端开发系列(2)—— 封装API


更新

  本文会随着后续实践文章有相应的改动,请及时更新!

  2010-12-21  HCNetSDK2010-12-21.rar

    主要更新了SerialDataCallBack委托的pRecvDataBuffer参数数据类型,由string改为byte[],这里感谢badnewfish实践后指出,欢迎大家积极反馈!

  2009-10-31  HCNetSDK2009-10-31.rar

    主要更新了大部分结构体中byte[]初始大小指定,加上了[MarshalAs(UnmanagedType.ByValArray, SizeConst = HCNetSDK.SERIALNO_LEN)]类似的标记。

  2009-10-24  HCNetSDK.cs

 

正文

  一、代码截图

   VS  

  二、 部分代码

  由于代码过长(超过1W行),这里就不贴全部了,大家直接在更新下面下载最新的SDK即可。

复制代码
         ///  设置码流速度
        
///   </summary>
         public   const   int  NET_DVR_SETSPEED  =   24 ;
        
///   <summary>
        
///  保持与设备的心跳(如果回调阻塞,建议2秒发送一次)
        
///   </summary>
         public   const   int  NET_DVR_KEEPALIVE  =   25 ;

        
// 远程按键定义如下:
         /*  key value send to CONFIG program  */
        
public   const   int  KEY_CODE_1  =   1 ;
        
public   const   int  KEY_CODE_2  =   2 ;
        
public   const   int  KEY_CODE_3  =   3 ;
        
public   const   int  KEY_CODE_4  =   4 ;
        
public   const   int  KEY_CODE_5  =   5 ;
        
public   const   int  KEY_CODE_6  =   6 ;
        
public   const   int  KEY_CODE_7  =   7 ;
        
public   const   int  KEY_CODE_8  =   8 ;
        
public   const   int  KEY_CODE_9  =   9 ;
        
public   const   int  KEY_CODE_0  =   10 ;
        
public   const   int  KEY_CODE_POWER  =   11 ;
        
public   const   int  KEY_CODE_MENU  =   12 ;
        
public   const   int  KEY_CODE_ENTER  =   13 ;
        
public   const   int  KEY_CODE_CANCEL  =   14 ;
        
public   const   int  KEY_CODE_UP  =   15 ;
        
public   const   int  KEY_CODE_DOWN  =   16 ;
        
public   const   int  KEY_CODE_LEFT  =   17 ;
        
public   const   int  KEY_CODE_RIGHT  =   18 ;
        
public   const   int  KEY_CODE_EDIT  =   19 ;
        
public   const   int  KEY_CODE_ADD  =   20 ;
        
public   const   int  KEY_CODE_MINUS  =   21 ;
        
public   const   int  KEY_CODE_PLAY  =   22 ;
        
public   const   int  KEY_CODE_REC  =   23 ;
        
public   const   int  KEY_CODE_PAN  =   24 ;
        
public   const   int  KEY_CODE_M  =   25 ;
        
public   const   int  KEY_CODE_A  =   26 ;
        
public   const   int  KEY_CODE_F1  =   27 ;
        
public   const   int  KEY_CODE_F2  =   28 ;

        
/*  for PTZ control  */
        
public   const   int  KEY_PTZ_UP_START  =  KEY_CODE_UP;
        
public   const   int  KEY_PTZ_UP_STOP  =   32 ;

        
public   const   int  KEY_PTZ_DOWN_START  =  KEY_CODE_DOWN;
        
public   const   int  KEY_PTZ_DOWN_STOP  =   33 ;

        
public   const   int  KEY_PTZ_LEFT_START  =  KEY_CODE_LEFT;
        
public   const   int  KEY_PTZ_LEFT_STOP  =   34 ;

        
public   const   int  KEY_PTZ_RIGHT_START  =  KEY_CODE_RIGHT;
        
public   const   int  KEY_PTZ_RIGHT_STOP  =   35 ;

        
///   <summary>
        
///  光圈+
        
///   </summary>
         public   const   int  KEY_PTZ_AP1_START  =  KEY_CODE_EDIT;  /*  光圈+  */
        
public   const   int  KEY_PTZ_AP1_STOP  =   36 ;

        
///   <summary>
        
///  光圈-
        
///   </summary>
         public   const   int  KEY_PTZ_AP2_START  =  KEY_CODE_PAN;  /*  光圈-  */
        
public   const   int  KEY_PTZ_AP2_STOP  =   37 ;

        
///   <summary>
        
///  聚焦+
        
///   </summary>
         public   const   int  KEY_PTZ_FOCUS1_START  =  KEY_CODE_A;  /*  聚焦+  */
        
public   const   int  KEY_PTZ_FOCUS1_STOP  =   38 ;

        
///   <summary>
        
///  聚焦-
        
///   </summary>
         public   const   int  KEY_PTZ_FOCUS2_START  =  KEY_CODE_M; /*  聚焦-  */
        
public   const   int  KEY_PTZ_FOCUS2_STOP  =   39 ;

        
///   <summary>
        
///  变倍+
        
///   </summary>
         public   const   int  KEY_PTZ_B1_START  =   40 /*  变倍+  */
        
public   const   int  KEY_PTZ_B1_STOP  =   41 ;

        
///   <summary>
        
///  变倍-
        
///   </summary>
         public   const   int  KEY_PTZ_B2_START  =   42 /*  变倍-  */
        
public   const   int  KEY_PTZ_B2_STOP  =   43 ;

        
// 9000新增
         public   const   int  KEY_CODE_11  =   44 ;
        
public   const   int  KEY_CODE_12  =   45 ;
        
public   const   int  KEY_CODE_13  =   46 ;
        
public   const   int  KEY_CODE_14  =   47 ;
        
public   const   int  KEY_CODE_15  =   48 ;
        
public   const   int  KEY_CODE_16  =   49 ;

        
///   <summary>
        
///  获取网络应用参数 EMAIL
        
///   </summary>
         public   const   int  NET_DVR_GET_EMAILCFG  =   228 ; //
         ///   <summary>
        
///  设置网络应用参数 EMAIL
        
///   </summary>
         public   const   int  NET_DVR_SET_EMAILCFG  =   229 ;     //
        
// 对应NET_DVR_EMAILCFG结构
        
//
         public   const   int  NET_DVR_GET_ALLHDCFG  =   300 ;         //
         #region  DS9000新增命令(_V30)
        
// 设备编码类型配置(NET_DVR_COMPRESSION_AUDIO结构)
         ///   <summary>
        
///  获取设备语音对讲编码参数
        
///   </summary>
         public   const   int  NET_DVR_GET_COMPRESSCFG_AUD  =   1058 ;      //
         ///   <summary>
        
///  设置设备语音对讲编码参数
        
///   </summary>
         public   const   int  NET_DVR_SET_COMPRESSCFG_AUD  =   1059 ;       //
         #endregion
        
///   <summary>
        
///  预览异常
        
///   </summary>
         public   const   int  NET_DVR_REALPLAYEXCEPTION  =   111 ; //
         ///   <summary>
        
///  预览时连接断开
        
///   </summary>
         public   const   int  NET_DVR_REALPLAYNETCLOSE  =   112 ; //
         ///   <summary>
        
///  预览5s没有收到数据
        
///   </summary>
         public   const   int  NET_DVR_REALPLAY5SNODATA  =   113 ;     //
         ///   <summary>
        
///  预览重连
        
///   </summary>
         public   const   int  NET_DVR_REALPLAYRECONNECT  =   114 ;     //
         ///   <summary>
        
///  回放数据播放完毕
        
///   </summary>
         public   const   int  NET_DVR_PLAYBACKOVER  =   101 ; //
         ///   <summary>
        
///  回放异常
        
///   </summary>
         public   const   int  NET_DVR_PLAYBACKEXCEPTION  =   102 ; //
         ///   <summary>
        
///  回放时候连接断开
        
///   </summary>
         public   const   int  NET_DVR_PLAYBACKNETCLOSE  =   103 ; //
         ///   <summary>
        
///  回放5s没有收到数据
        
///   </summary>
         public   const   int  NET_DVR_PLAYBACK5SNODATA  =   104 ;

        
#region  DS-6001D/F
        
///   <summary>
        
///  DS-6001D Decoder
        
///      NET_DVR_DECODERINFO, *LPNET_DVR_DECODERINFO;
        
///   </summary>
         public   struct  NET_DVR_DECODERINFO
        {
            
///   <summary>
            
///  解码设备连接的服务器IP
            
///      public byte byEncoderIP[16];
            
///   </summary>
             public   byte [] byEncoderIP;
            
///   <summary>
            
///  解码设备连接的服务器的用户名
            
///      public byte byEncoderUser[16];
            
///   </summary>
             public   byte [] byEncoderUser;
            
///   <summary>
            
///  解码设备连接的服务器的密码
            
///      public byte byEncoderPasswd[16];
            
///   </summary>
             public   byte [] byEncoderPasswd;
            
///   <summary>
            
///  解码设备连接服务器的连接模式
            
///   </summary>
             public   byte  bySendMode;
            
///   <summary>
            
///  解码设备连接的服务器的通道号
            
///   </summary>
             public   byte  byEncoderChannel;
            
///   <summary>
            
///  解码设备连接的服务器的端口号
            
///   </summary>
             public   ushort  wEncoderPort;
            
///   <summary>
            
///  保留
            
///      public byte reservedData[4];
            
///   </summary>
             public   byte [] reservedData;
        }

        
///   <summary>
        
///  NET_DVR_DECODERSTATE, *LPNET_DVR_DECODERSTATE;
        
///   </summary>
         public   struct  NET_DVR_DECODERSTATE
        {
            
///   <summary>
            
///  解码设备连接的服务器IP
            
///      public byte byEncoderIP[16];
            
///   </summary>
             public   byte [] byEncoderIP;
            
///   <summary>
            
///  解码设备连接的服务器的用户名
            
///      public byte byEncoderUser[16];
            
///   </summary>
             public   byte [] byEncoderUser;
            
///   <summary>
            
///  解码设备连接的服务器的密码
            
///      public byte byEncoderPasswd[16];
            
///   </summary>
             public   byte [] byEncoderPasswd;
            
///   <summary>
            
///  解码设备连接的服务器的通道号
            
///   </summary>
             public   byte  byEncoderChannel;
            
///   <summary>
            
///  解码设备连接的服务器的连接模式
            
///   </summary>
             public   byte  bySendMode;
            
///   <summary>
            
///  解码设备连接的服务器的端口号
            
///   </summary>
             public   ushort  wEncoderPort;
            
///   <summary>
            
///  解码设备连接服务器的状态
            
///   </summary>
             public   uint  dwConnectState;
            
///   <summary>
            
///  保留
            
///      public byte reservedData[4];
            
///   </summary>
             public   byte [] reservedData;
        }

        
#region  解码设备控制码定义
        
public   const   int  NET_DEC_STARTDEC  =   1 ;
        
public   const   int  NET_DEC_STOPDEC  =   2 ;
        
public   const   int  NET_DEC_STOPCYCLE  =   3 ;
        
public   const   int  NET_DEC_CONTINUECYCLE  =   4 ;
        
#endregion


        
#endregion

        
///   <summary>
        
///  Email
        
///      NET_DVR_EMAILPARA, *LPNET_DVR_EMAILPARA;
        
///   </summary>
         public   struct  NET_DVR_EMAILPARA
        {
            
///   <summary>
            
///  邮件账号
            
///      public byte sUsername[64];
            
///   </summary>
             public   string  sUsername;
            
///   <summary>
            
///  邮件密码
            
///      public byte sPassword[64];
            
///   </summary>
             public   string  sPassword;
            
///   <summary>
            
///      public byte sSmtpServer[64];
            
///   </summary>
             public   string  sSmtpServer;
            
///   <summary>
            
///      public byte sPop3Server[64];
            
///   </summary>
             public   string  sPop3Server;
            
///   <summary>
            
///  邮件地址
            
///      public byte sMailAddr[64];
            
///   </summary>
             public   string  sMailAddr;
            
///   <summary>
            
///  上传报警/异常等的email
            
///      public byte sEventMailAddr1[64];
            
///   </summary>
             public   byte [] sEventMailAddr1;
            
///   <summary>
            
///      public byte sEventMailAddr2[64];
            
///   </summary>
             public   byte [] sEventMailAddr2;
            
///   <summary>
            
///      public byte res[16];
            
///   </summary>
             public   byte [] res;
        }

        
///   <summary>
        
///  NET_DVR_NETCFG_OTHER, *LPNET_DVR_NETCFG_OTHER;
        
///   </summary>
         public   struct  NET_DVR_NETCFG_OTHER
        {
            
public   uint  dwSize;
            
///   <summary>
            
///      char    sFirstDNSIP[16];
            
///   </summary>
             public   string  sFirstDNSIP;
            
///   <summary>
            
///      char    sSecondDNSIP[16];
            
///   </summary>
             public   string  sSecondDNSIP;
            
///   <summary>
            
///  char    sRes[32];
            
///   </summary>
             public   string  sRes;
        }

        
///   <summary>
        
///  连接的通道配置 2007-11-05
        
///      NET_DVR_MATRIX_DECCHANINFO, *LPNET_DVR_MATRIX_DECCHANINFO;
        
///   </summary>
         public   struct  NET_DVR_MATRIX_DECCHANINFO
        {
            
///   <summary>
            
///  是否启用 0-否 1-启用
            
///   </summary>
             public   uint  dwEnable;
            
///   <summary>
            
///  轮循解码通道信息
            
///   </summary>
             public  NET_DVR_MATRIX_DECINFO struDecChanInfo;
        }
        
///   <summary>
        
///  压缩参数?
        
///      NET_DVR_COMPRESSIONCFG_NEW, *LPNET_DVR_COMPRESSIONCFG_NEW;
        
///   </summary>
         public   struct  NET_DVR_COMPRESSIONCFG_NEW
        {
            
public   uint  dwSize;
            
///   <summary>
            
///  定时录像
            
///   </summary>
             public  NET_DVR_COMPRESSION_INFO_EX struLowCompression;
            
///   <summary>
            
///  事件触发录像
            
///   </summary>
             public  NET_DVR_COMPRESSION_INFO_EX struEventCompression;
        }
        
///   <summary>
        
///  抓图模式
        
///   </summary>
         public   enum  CAPTURE_MODE
        {
            
///   <summary>
            
///  BMP模式
            
///   </summary>
            BMP_MODE  =   0 ,         //
             ///   <summary>
            
///  JPEG模式 
            
///   </summary>
            JPEG_MODE  =   1          //
        }
        
///   <summary>
        
///  实时声音模式
        
///   </summary>
         public   enum  REALSOUND_MODE
        {
            
///   <summary>
            
///  独占模式
            
///   </summary>
            MONOPOLIZE_MODE  =   1 ,
            
///   <summary>
            
///  共享模式
            
///   </summary>
            SHARE_MODE  =   2
        }
        
///   <summary>
        
///  录象文件参数(带卡号)
        
///      NET_DVR_FINDDATA_CARD, *LPNET_DVR_FINDDATA_CARD;
        
///   </summary>
         public   struct  NET_DVR_FINDDATA_CARD
        {
            
///   <summary>
            
///  文件名
            
///      char sFileName[100];
            
///   </summary>
             public   string  sFileName;
            
///   <summary>
            
///  文件的开始时间
            
///   </summary>
             public  NET_DVR_TIME struStartTime;
            
///   <summary>
            
///  文件的结束时间
            
///   </summary>
             public  NET_DVR_TIME struStopTime;
            
///   <summary>
            
///  文件的大小
            
///   </summary>
             public   uint  dwFileSize;
            
///   <summary>
            
///  卡号?
            
///      char sCardNum[32];
            
///   </summary>
             public   char  sCardNum;
        }

        
///   <summary>
        
///  设置重新连接间隔
        
///      NET_DVR_API BOOL __stdcall NET_DVR_SetReconnect(DWORD dwInterval = 30000, BOOL bEnableRecon = TRUE);
        
///   </summary>
        
///   <param name="dwInterval"></param>
        
///   <param name="bEnableRecon"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_SetReconnect( uint  dwInterval,  bool  bEnableRecon);
        
///   <summary>
        
///  通过IPSever获取设备动态IP地址[Ex]
        
///      NET_DVR_API BOOL  __stdcall NET_DVR_GetDVRIPByResolveSvr_EX(char *sServerIP, WORD wServerPort, unsigned char *sDVRName, WORD wDVRNameLen, BYTE *sDVRSerialNumber, WORD wDVRSerialLen, char* sGetIP, DWORD *dwPort);
        
///   </summary>
        
///   <param name="sServerIP"></param>
        
///   <param name="wServerPort"></param>
        
///   <param name="sDVRName"></param>
        
///   <param name="wDVRNameLen"></param>
        
///   <param name="sDVRSerialNumber"></param>
        
///   <param name="wDVRSerialLen"></param>
        
///   <param name="sGetIP"></param>
        
///   <param name="dwPort"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_GetDVRIPByResolveSvr_EX( string  sServerIP,  ushort  wServerPort,  string  sDVRName,  ushort  wDVRNameLen,  string  sDVRSerialNumber,  ushort  wDVRSerialLen, StringBuilder sGetIP,  ref   uint  dwPort);
        
///   <summary>
        
///      NET_DVR_API BOOL __stdcall NET_DVR_PTZControlWithSpeed_EX(LONG lRealHandle, DWORD dwPTZCommand, DWORD dwStop, DWORD dwSpeed);
        
///   </summary>
        
///   <param name="lRealHandle"></param>
        
///   <param name="dwPTZCommand"></param>
        
///   <param name="dwStop"></param>
        
///   <param name="dwSpeed"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_PTZControlWithSpeed_EX( int  lRealHandle,  uint  dwPTZCommand,  uint  dwStop,  uint  dwSpeed);
        
///   <summary>
        
///      NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack(LONG lRealHandle,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
        
///   </summary>
        
///   <param name="lRealHandle"></param>
        
///   <param name="dwPTZTrackCmd"></param>
        
///   <param name="dwTrackIndex"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_PTZMltTrack( int  lRealHandle,  uint  dwPTZTrackCmd,  uint  dwTrackIndex);
        
///   <summary>
        
///      NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack_Other(LONG lUserID,LONG lChannel,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <param name="lChannel"></param>
        
///   <param name="dwPTZTrackCmd"></param>
        
///   <param name="dwTrackIndex"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_PTZMltTrack_Other( int  lUserID,  int  lChannel,  uint  dwPTZTrackCmd,  uint  dwTrackIndex);
        
///   <summary>
        
///      NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack_EX(LONG lRealHandle,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
        
///   </summary>
        
///   <param name="lRealHandle"></param>
        
///   <param name="dwPTZTrackCmd"></param>
        
///   <param name="dwTrackIndex"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_PTZMltTrack_EX( int  lRealHandle,  uint  dwPTZTrackCmd,  uint  dwTrackIndex);
        
///   <summary>
        
///  NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_Card(LONG lFindHandle, LPNET_DVR_FINDDATA_CARD lpFindData);
        
///   </summary>
        
///   <param name="lFindHandle"></param>
        
///   <param name="lpFindData"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   int  NET_DVR_FindNextFile_Card( int  lFindHandle, NET_DVR_FINDDATA_CARD lpFindData);
        
///   <summary>
        
///  NET_DVR_API LONG __stdcall NET_DVR_FindFile_Card(LONG lUserID, LONG lChannel, DWORD dwFileType, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <param name="lChannel"></param>
        
///   <param name="dwFileType"></param>
        
///   <param name="lpStartTime"></param>
        
///   <param name="lpStopTime"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   int  NET_DVR_FindFile_Card( int  lUserID,  int  lChannel,  uint  dwFileType, NET_DVR_TIME lpStartTime, NET_DVR_TIME lpStopTime);
        
///   <summary>
        
///  NET_DVR_API int    __stdcall NET_DVR_GetPlayBackPos(LONG lPlayHandle);
        
///   </summary>
        
///   <param name="lPlayHandle"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   int  NET_DVR_GetPlayBackPos( int  lPlayHandle);
        
// 解码设备DS-6001D/DS-6001F
         ///   <summary>
        
///  NET_DVR_API BOOL __stdcall NET_DVR_StartDecode(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERINFO lpDecoderinfo);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <param name="lChannel"></param>
        
///   <param name="lpDecoderinfo"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_StartDecode( int  lUserID,  int  lChannel, NET_DVR_DECODERINFO lpDecoderinfo);
        
///   <summary>
        
///  NET_DVR_API BOOL __stdcall NET_DVR_StopDecode(LONG lUserID, LONG lChannel);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <param name="lChannel"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_StopDecode( int  lUserID,  int  lChannel);
        
///   <summary>
        
///  NET_DVR_API BOOL __stdcall NET_DVR_GetDecoderState(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERSTATE lpDecoderState);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <param name="lChannel"></param>
        
///   <param name="lpDecoderState"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_GetDecoderState( int  lUserID,  int  lChannel, NET_DVR_DECODERSTATE lpDecoderState);
        
///   <summary>
        
///  保存参数
        
///      NET_DVR_API BOOL __stdcall NET_DVR_SaveConfig(LONG lUserID);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_SaveConfig( int  lUserID);
        
///   <summary>
        
///      NET_DVR_API BOOL __stdcall NET_DVR_SetVideoEffect(LONG lUserID, LONG lChannel, DWORD dwBrightValue, DWORD dwContrastValue, DWORD dwSaturationValue, DWORD dwHueValue);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <param name="lChannel"></param>
        
///   <param name="dwBrightValue"></param>
        
///   <param name="dwContrastValue"></param>
        
///   <param name="dwSaturationValue"></param>
        
///   <param name="dwHueValue"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_SetVideoEffect( int  lUserID,  int  lChannel,  uint  dwBrightValue,  uint  dwContrastValue,  uint  dwSaturationValue,  uint  dwHueValue);
        
///   <summary>
        
///      NET_DVR_API BOOL __stdcall NET_DVR_GetVideoEffect(LONG lUserID, LONG lChannel, DWORD *pBrightValue, DWORD *pContrastValue, DWORD *pSaturationValue, DWORD *pHueValue);
        
///   </summary>
        
///   <param name="lUserID"></param>
        
///   <param name="lChannel"></param>
        
///   <param name="pBrightValue"></param>
        
///   <param name="pContrastValue"></param>
        
///   <param name="pSaturationValue"></param>
        
///   <param name="pHueValue"></param>
        
///   <returns></returns>
        [DllImport( " HCNetSDK.dll " )]
        
public   static   extern   bool  NET_DVR_GetVideoEffect( int  lUserID,  int  lChannel,  out   uint  pBrightValue,  out   uint  pContrastValue,  out   uint  pSaturationValue,  out   uint  pHueValue);
复制代码
  三、下章预告
    实现最基本的连接服务器并预览图像的功能。


结束语

  首先我必须强调本章的翻译是一个体力活!本章可能会再随后的文章不断的更新,主要是数据类型对应可能有问题,这里也是凭经验来进行对应了,也欢迎有朋友尽早的向我提交勘误,我好及时的更新文章。


转载:http://www.cnblogs.com/over140/archive/2009/10/24/1577975.html

目录
相关文章
|
18小时前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
【7月更文挑战第24天】在 Python Web 开发领域, RESTful API 设计成为一种艺术, 关注用户体验与开发者友好性。
14 7
|
1天前
|
JSON API 数据格式
深度剖析!Python Web 开发中 RESTful API 的每一个细节,你不可不知的秘密!
【7月更文挑战第23天】在Python Web开发中,RESTful API利用HTTP协议构建强大、灵活的应用。GET获取资源,如`/products/:id`;POST创建新资源;PUT更新;DELETE删除。正确使用状态码,如200、201、404、500,至关重要。JSON化数据与版本控制(如`/v1/products`)增强API实用性。认证(OAuth, JWT)保障安全性,而清晰的错误消息提升用户体验。掌握这些细节,方能设计出高性能、易用的RESTful API。
13 7
|
18小时前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
【7月更文挑战第24天】在Python的Web开发领域,掌握RESTful API至关重要。利用Flask框架,可迅速搭建API,进行用户管理的CRUD操作。需先安装Flask (`pip install Flask`),然后定义路由处理GET、POST、PUT、DELETE请求,实现用户数据的检索、创建、更新和删除。
13 5
|
2天前
|
API 数据安全/隐私保护 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
【7月更文挑战第23天】Python的RESTful API设计在Web开发中流行,提升效率与体验。REST强调HTTP方法(GET, POST, PUT, DELETE)操作资源。使用Flask框架可快速实现API,如管理用户信息。示例代码展示如何创建、读取、更新和删除用户,通过不同HTTP方法和URL路径。实际应用中,增加验证、错误处理和权限控制可增强API的安全性和稳定性。安装Flask后,可运行代码测试API功能。
17 6
|
20小时前
|
存储 API 文件存储
|
18小时前
|
缓存 安全 API
后端开发中的API设计原则与实践
在数字化时代的浪潮中,后端开发作为技术架构的核心,承载着数据交互与业务逻辑的重要职责。本文深入探讨了API设计的艺术与科学,从RESTful原则到安全性考量,再到性能优化的实践策略,旨在为后端开发者提供一套全面的API设计指南。通过具体案例分析,文章揭示了良好API设计对于提升系统可维护性、扩展性和用户体验的重要性,同时指出了常见设计陷阱与应对策略,为后端开发领域的专业人士提供了宝贵的参考和启示。
9 0
|
3天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
【7月更文挑战第22天】构建RESTful API实战:**使用Python Flask设计图书管理API,遵循REST原则,通过GET/POST/PUT/DELETE操作处理/books及/books/&lt;id&gt;。示例代码展示资源定义、请求响应交互。关键点包括HTTP状态码的使用、版本控制、错误处理和文档化。本文深入探讨设计哲学与实现技巧,助力理解RESTful API开发。
12 0
|
20天前
|
NoSQL 安全 API
如何有效提升 API 接口的安全性?
**API安全关键在于验证和防刷。通过排序参数、生成签名和MD5加密确保请求合法性。使用Redis限制请求频率,防止接口被恶意刷取。验证和防刷策略结合,保护API免受攻击和滥用。**
45 0
|
2天前
|
缓存 自然语言处理 搜索推荐
解析微店商品详情的 API 接口获取之道
在电商蓬勃发展的时代,微店的商品详情数据对商家与开发者极具价值。API接口成为挖掘这些数据的关键,助力商家洞察市场,优化策略,实时监控竞品,管理库存;赋能开发者创新,如构建推荐系统和分析工具。获取接口需注册认证,理解政策,明确权限需求。调用API须精读文档,选用合适语言编码,处理错误,优化策略如缓存和异步请求。数据处理涉及自然语言分析、价格预测和情感分析,应用广泛。注意事项包括合规操作、数据安全、适应接口变动及性能优化,确保高效合法利用数据,推动电商进步。
|
2天前
|
安全 API 网络安全
​邮箱OTP认证验证API发送邮件接口
**摘要 (Markdown格式):** OTP认证增强在线服务安全,尤其适用于邮箱验证。AOKSend提供邮箱OTP验证API,实现安全的邮件发送和用户身份验证。关键优势包括提高安全性、简化用户体验、实时发送、可扩展性和多层安全。配置涉及生成API密钥、设置SMTP、实现OTP逻辑、发送邮件及验证。AOKSend的分析工具帮助优化策略,适合各规模企业。

热门文章

最新文章