C# 視頻監控系列(6):服務器端——封裝API(上) [HikServer.dll]

前言

      寫系列文章的時候[前言]部分變得無言了,可能來得順利了點吧: ) 本章中提供的封裝均是我用笨辦法從<<Hikvision 板卡網絡開發包編程手冊V4.7>>和<<DS-4000HC、HCS、HC+、HF、HS、MD卡的Windows編程指南V4.3>>中拷貝出來並參照VC++代碼進行整理的,主要是針對HikServer.dll和DS40xxSDK.dll的調用封裝。

 

注意

     本系列文章限於學習交流,注重過程,由於涉及公司,所以不提供源代碼下載,非常抱歉!!但是請大家放心,核心、實現以及其他能夠貼出來的代碼我都會貼出來,並且爭取盡所能的回答留言裏的每一個問題,感謝大家關注,歡迎交流 :)

 

系列

     1.     C# 視頻監控系列(1):準備

     2.     C# 視頻監控系列(2):客戶端——封裝API

     3.     C# 視頻監控系列(3):客戶端——連接服務器

     4.     C# 視頻監控系列(4):客戶端——音頻接收和抓圖

     5.     C# 視頻監控系列(5):客戶端——給服務器端發送字符串和錄像(數據捕獲)

     6.     C# 視頻監控系列(6):服務器端——封裝API(上) [HikServer.dll]

 

正文

     1.     HikServer.dll

複製代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace HikServer
{

    
public struct PSERVER_VIDEOINFO
    {
        
/// <summary>
        
/// 序列號
        
/// BYTE    m_datatype[64];
        
/// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
        
public byte[] m_datatype;
        
/// <summary>
        
/// 系統的通道個數
        
/// BYTE    m_channum;
        
/// </summary>
        public byte m_channum;
        
/// <summary>
        
/// 超時等待時間,1-300單位:分鐘 
        
/// DWORD   m_waittime;
        
/// </summary>
        public int m_waittime;
        
/// <summary>
        
/// 目前沒有使用
        
/// DWORD   m_bufnum;
        
/// </summary>
        public ulong m_bufnum;
    }

    
//[StructLayout(LayoutKind.Sequential)]
    
//public struct PSERVER_VIDEOINFO
    
//{
    
//    public IntPtr m_datatype;  //序列號  
    
//    public byte m_channum;//系統的通道個數 
    
//    public int m_waittime;//超時等待時間,1-300單位:分鐘 
    
//    public int m_bufnum;//目前沒有使用 
    
//}

    
/// <summary>
    
/// 通道數據類型
    
/// </summary>
    public enum ChannelDataType
    {
        NORMAL 
= 50,
        DIALING,
        SMALLPIC
    }

    
/// <summary>
    
/// VC++Demo:委託內調用SetIBPMode(ChannelHandle[port],211,2,2,framerat);
    
/// </summary>
    
/// <param name="port"></param>
    
/// <param name="framerat"></param>
    public delegate void SetIBP(int port, int framerat);

    
/// <summary>
    
/// VC++Demo:委託內調用CaptureIFrame(ChannelHandle[port]);
    
/// </summary>
    
/// <param name="port"></param>
    public delegate void MakeIFrame(int port);

    
/// <summary>
    
/// VC++Demo:委託內調用StartVideoCapture(ChannelHandle[port]);    
    
/// </summary>
    
/// <param name="nChannel"></param>
    public delegate void StartCap(int nChannel);

    
/// <summary>
    
/// VC++Demo:委託內調用StopVideoCapture(ChannelHandle[port]);
    
/// </summary>
    
/// <param name="nChannel"></param>
    public delegate void StopCap(int nChannel);

    
/// <summary>
    
/// 驗證用戶名密碼
    
/// </summary>
    
/// <param name="username"></param>
    
/// <param name="namelen"></param>
    
/// <param name="password"></param>
    
/// <param name="passlen"></param>
    
/// <returns></returns>
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    
public delegate int CheckPassword(string username, ushort namelen, string password, ushort passlen);

    
/// <summary>
    
/// 驗證IP
    
///     VC++Demo:return 0;
    
/// </summary>
    
/// <param name="nChannel"></param>
    
/// <param name="nIP"></param>
    
/// <returns></returns>
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    
public delegate int CheckIP(int nChannel, string nIP);

    
public static class HikServer
    {
        
public static readonly uint WM_USER = 0x0400;

        
/// <summary>
        
/// 啓動服務端
        
///     返回true表示成功,返回false表示失敗
        
/// <code>
        
/// BOOL  __stdcall  MP4_ServerStart(PSERVER_VIDEOINFO videoinfo); 
        
/// </code>
        
/// </summary>
        
/// <param name="videoinfo"></param>
        
/// <returns></returns>
        [DllImport("HikServer.dll")]
        
public static extern int MP4_ServerStart(ref PSERVER_VIDEOINFO videoinfo);

        
/// <summary>
        
/// 停止服務端
        
///     返回true表示成功,返回false表示失敗
        
/// <code>
        
/// BOOL  __stdcall  MP4_ServerStop(); 
        
/// </code>
        
/// </summary>
        
/// <returns></returns>
        [DllImport("HikServer.dll")]
        
public static extern bool MP4_ServerStop();

        
/// <summary>
        
/// 獲取服務器狀態
        
///     返回true表示服務器已經啓動,返回false表示服務器沒有啓動
        
/// <code>
        
/// BOOL  __stdcall  MP4_ServerGetState(WORD * clientnum); 
        
/// typedef unsigned short      WORD;
        
/// </code>
        
/// </summary>
        
/// <param name="clientnum">表示當前與服務器相連的客戶端數據</param>
        
/// <returns></returns>
        [DllImport("HikServer.dll")]
        
public static extern bool MP4_ServerGetState(out ushort clientnum);

        
/// <summary>
        
/// 給客戶端發送命令碼
        
///     和函數MP4_ServerStringToClient不同,它給正連接在該通道上的所有客戶端發送命令碼。 
        
///     返回true表示成功,返回false表示失敗 
        
/// <code>
        
/// BOOL  __stdcall  MP4_ServerCommandToClient(char cCommand,char nChannel); 
        
/// </code>
        
/// </summary>
        
/// <param name="cCommand">命令碼</param>
        
/// <param name="nChannel">通道號</param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerCommandToClient(int cCommand, int nChannel);

        
/// <summary>
        
/// 設置接收命令碼的相關參數
        
/// <code>
        
/// void  __stdcall  MP4_ServerSetMessage(UINT nMessage,HWND hWnd); 
        
/// </code>
        
/// </summary>
        
/// <param name="nMessage">對應接收程序的消息</param>
        
/// <param name="hWnd">應用程序窗口句柄</param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerSetMessage(uint nMessage, IntPtr hWnd);

        
/// <summary>
        
/// 設置是否進行IP驗證。 
        
///     如果進行IP驗證,調用該函數,那麼每次客戶端連接的時候,會調用CheckIP。 
        
///     如果不進行IP驗證,不需要調用該函數。 
        
///     如果調用了MP4_ServerCheckIP之後,又想取消IP驗證,只需要調用MP4_ServerCheckIP(NULL)。 
        
/// <code>
        
/// void  __stdcall MP4_ServerCheckIP(int(CALLBACK *CheckIP)(DWORD nChannel,char* nIP)); 
        
/// CheckIP函數說明:nChannel表示通道號,nIP表示客戶端的IP地址。返回0表示驗證通過,返回-1 
        
/// 表示驗證沒有通過。 
        
/// </code>
        
/// </summary>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerCheckIP(CheckIP cip);

        
/// <summary>
        
/// 設置是否進行用戶身份驗證。 
        
///     使用同MP4_ServerCheckIP。 
        
///     目前namelen和password兩個值無效,都是50,並不表示用戶名和密碼的實際長度。用戶名和密碼必須小於50個字節。 
        
/// 說明: 
        
///     1>因爲開發包對用戶名和密碼不做任何處理,只是簡單地分別發送50字節的數據到服務端,所以在驗證
        
///       的實現過程中,用戶可以通過設置標誌位的方法來確定用戶名和密碼的實際長度。 
        
///     2>也可以同時進行IP驗證和用戶身份驗證。在開發包中先進行用戶身份驗證,再進行IP驗證。 
        
/// <code>
        
/// 7. void  __stdcall  MP4_ServerCheckPassword(int(CALLBACK *CheckPassword)(char *username,WORD namelen,char *password,WORD passlen)); 
        
/// CheckPassword函數說明:username表示用戶名,namelen表示用戶名字符串長度,password表示密碼,passlen表示密碼字符串長度。
        
/// </code>
        
/// </summary>
        
/// <param name="nMessage"></param>
        
/// <param name="hWnd"></param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerCheckPassword(CheckPassword cp);

        
/// <summary>
        
/// 往發送緩存寫數據。 
        
///     網絡開發包通過這個接口獲得板卡的數據。 
        
/// 說明: 
        
///     現在開發包內部不會直接調用StartVideoCapture和StopVideoCapture函數,而是通過StartCap和StopCap
        
///     來啓動和停止捕獲數據。如果用戶調用StopVideoCapture或者停止調用MP4_ServerWriteData都會使客戶
        
///     端無法收到數據。
        
/// <code>
        
/// 8. void  __stdcall  MP4_ServerWriteData(DWORD nChannel,UCHAR *pPacketBuffer, DWORD  nPacketSize, int frameType, int breakable); 
        
/// typedef unsigned long       DWORD;
        
/// typedef unsigned char UCHAR;
        
/// </code>
        
/// </summary>
        
/// <param name="nChannel">通道號。</param>
        
/// <param name="pPacketBuffer">緩衝區指針。</param>
        
/// <param name="nPacketSize">緩衝區長度。 </param>
        
/// <param name="frameType">幀類型。</param>
        
/// <param name="breakable">ReadStreamData的返回值</param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerWriteData(ulong nChannel, string pPacketBuffer, ulong nPacketSize, int frameType, int breakable);

        
/// <summary>
        
/// 設置啓動捕獲的回調。
        
/// <code>
        
/// 9.  void  __stdcall  MP4_ServerSetStart(void(CALLBACK *StartCap)(int nChannel)); 
        
/// StartCap函數說明:用戶實現這個函數,只需要調用StartVideoCapture。 
        
/// nChannel表示通道號。 
        
/// </code>
        
/// </summary>
        
/// <param name="sc"></param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerSetStart(StartCap sc);

        
/// <summary>
        
/// 設置停止捕獲的回調。
        
/// <code>
        
/// 10.  void  __stdcall  MP4_ServerSetStop(void(CALLBACK *StopCap)(int nChannel)); 
        
/// StopCap函數說明:用戶實現這個函數,只需要調用StopVideoCapture。 
        
/// nChannel表示通道號。 
        
/// </code>
        
/// </summary>
        
/// <param name="sc"></param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerSetStop(StopCap sc);

        
/// <summary>
        
/// 讀取客戶端消息。
        
///     讀取客戶端MP4_ClientCommandtoServer函數發送過來的消息(不超過900字節),消息的內容和長度由用戶自己定義。 
        
/// <code>
        
/// 11.  void  __stdcall  MP4_ServerReadLastMessage(char *m_sIP,char *m_sCommand,WORD *m_wLen); 
        
/// </code>
        
/// </summary>
        
/// <param name="m_sIP">消息來自哪個IP地址</param>
        
/// <param name="m_sCommand">消息緩衝區指針。</param>
        
/// <param name="m_wLen">消息實際長度。 </param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerReadLastMessage(StringBuilder m_sIP, StringBuilder m_sCommand, out ushort m_wLen);

        
/// <summary>
        
/// 給客戶端發送消息字符串。
        
/// <code>
        
/// 12.  BOOL  __stdcall  MP4_ServerStringToClient(LPCTSTR m_lAddrIP,char *m_sCommand, WORD m_wLen); 
        
/// typedef LPCSTR LPCTSTR;
        
/// typedef CONST CHAR *LPCSTR
        
/// </code>
        
/// </summary>
        
/// <param name="m_lAddrIP">客戶端IP地址。</param>
        
/// <param name="m_sCommand">消息緩衝區指針。</param>
        
/// <param name="m_wLen">消息實際長度。</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗</returns>
        [DllImport("HikServer.dll")]
        
public static extern bool MP4_ServerStringToClient(string m_lAddrIP, string m_sCommand, ushort m_wLen);

        
/// <summary>
        
/// 對nChannel通道的網絡連接進行復位。
        
///     如果需要單獨終止該通道目前的客戶端連接,或者該通道目前的網絡狀態處於異常狀況,都可以調用該函
        
///     數。該函數對任何板卡SDK對應操作都不會有任何影響。
        
/// <code>
        
/// 13.  void  __stdcall  MP4_ServerResetChannel(DWORD nChannel);
        
/// </code>
        
/// </summary>
        
/// <param name="nChannel">通道號。</param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerResetChannel(ulong nChannel);

        
/// <summary>
        
/// 設置服務端的網絡端口號和客戶端的網絡端口號。
        
///     服務端使用端口如下(假設dServerPort=5050):
        
///     TCP只需要佔用5050。
        
///     UDP和多播需要佔用5050、5060----(5060+2*通道個數)。
        
///     
        
///     客戶端使用端口如下(假設dClientPort =6050):
        
///     TCP和多播只需要佔用6057。
        
///     UDP需要佔用6057、6060----(6060+2*窗口個數)。
        
/// <code>
        
/// 14.  BOOL  __stdcall  MP4_ServerSetNetPort(WORD dServerPort,WORD dClientPort);
        
/// </code>
        
/// </summary>
        
/// <param name="dServerPort">服務端的起始網絡端口號。必須和函數MP4_ClientSetNetPort的dServerPort參數相同。</param>
        
/// <param name="dClientPort">客戶端的網絡端口號。必須和函數MP4_ClientSetNetPort的dClientPort參數相同。</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。</returns>
        [DllImport("HikServer.dll")]
        
public static extern int MP4_ServerSetNetPort(ushort dServerPort, ushort dClientPort);

        
/// <summary>
        
/// 設置多播的TTL參數。
        
///     注意: 如果您不調用函數MP4_ServerSetTTL,默認TTL值是32。
        
///     MP4_ServerSetTTL設置的值在MP4_ServerStop之後會失效,恢復成默認的32,所以您如果需要指定TTL
        
///     大小,每次在MP4_ServerStart之前都需要調用MP4_ServerSetTTL。
        
/// <code>
        
/// 15.  BOOL  __stdcall  MP4_ServerSetTTL(unsigned char cTTLVal); 
        
/// </code>
        
/// </summary>
        
/// <param name="cTTLVal">TTL值。1-255。</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。</returns>
        [DllImport("HikServer.dll")]
        
public static extern int MP4_ServerSetTTL(byte cTTLVal);

        
/// <summary>
        
/// 設置發送緩衝區大小。
        
///     注意: 如果您不調用函數MP4_ServerSetBufNum,默認緩衝區是30。
        
///     MP4_ServerSetBufNum設置的值在MP4_ServerStop之後會失效,恢復成默認的30,所以您如果需要指定
        
///     緩衝區大小,每次在MP4_ServerStart之前都需要調用MP4_ServerSetBufNum。
        
/// <code>
        
/// 16.  BOOL  __stdcall  MP4_ServerSetBufNum(DWORD nChannel,WORD dBufNum); 
        
/// </code>
        
/// </summary>
        
/// <param name="nChannel">通道號。</param>
        
/// <param name="dBufNum">緩衝區大小。單位是8K,如果dBufNum=10,那麼緩衝區大小爲80K,建議設置成30。範圍:10-100。</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。</returns>
        [DllImport("HikServer.dll")]
        
public static extern int MP4_ServerSetBufNum(ushort nChannel, ushort dBufNum);

        
/// <summary>
        
/// 設置自動調節幀率的回調函數,只在電話線連接中使用。
        
///     在回調函數SetIBP中只調用SetIBPMode函數
        
/// <code>
        
/// 17.  void  __stdcall  MP4_ServerSetIBPMode(void(CALLBACK *SetIBP)(int nChannel,int framerat));
        
/// </code>
        
/// </summary>
        
/// <param name="setIBP"></param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerSetIBPMode(SetIBP setIBP);

        
/// <summary>
        
/// 設置連接客戶端的等待時間和嘗試次數。
        
///     說明:當服務端給客戶端發送消息的時候,需要等待客戶端應答,以保證客戶端收到消息,如果失敗,還
        
///     可以繼續嘗試dTrynum-1次發送。
        
///     注意:
        
///     1>如果這兩個參數設得太小,當網絡繁忙或客戶端繁忙的時候,可能會導致發送消息失敗;如果這兩個參
        
///     數設得太大,當試圖連接的客戶端不存在(IP地址錯誤、或者關機、或者沒有啓動客戶端軟件),消息發送
        
///     函數會等待很久才返回。
        
///     2>這兩個參數設置之後一直有效,直到下次調用該函數修改。
        
/// <code>
        
/// 18.  BOOL  __stdcall  MP4_ServerSetWait(DWORD dEachWaitTime,DWORD dTrynum); 
        
/// </code>
        
/// </summary>
        
/// <param name="dEachWaitTime">等待時間。單位是毫秒,範圍300-10000。如果不調用這個函數,默認是2000。</param>
        
/// <param name="dTrynum">嘗試次數。範圍1-50。如果不調用這個函數,默認是2次。</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。</returns>
        [DllImport("HikServer.dll")]
        
public static extern bool MP4_ServerSetWait(ulong dEachWaitTime, ulong dTrynum);

        
/// <summary>
        
/// 給連接在指定通道上的所有客戶端發送消息字符串。
        
/// <code>
        
/// 19.  BOOL  __stdcall  MP4_ServerStringToClient_other     (char nChannel,char *m_sCommand, WORD m_wLen);  
        
/// </code>
        
/// </summary>
        
/// <param name="nChannel">通道號。</param>
        
/// <param name="m_sCommand">消息緩衝區指針。</param>
        
/// <param name="m_wLen">消息實際長度。</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。 </returns>
        [DllImport("HikServer.dll")]
        
public static extern bool MP4_ServerStringToClient_other(int nChannel, string m_sCommand, ushort m_wLen);

        
/// <summary>
        
/// 動態切換通道數據類型。
        
///     注意:調用MP4_ServerChangeChanType之前必須調用StopVideoCapture。(詳見DEMO) 
        
/// <code>
        
/// 20.  BOOL  __stdcall  MP4_ServerChangeChanType(char nChannel,char cType); 
        
/// </code>
        
/// </summary>
        
/// <param name="nChannel">通道號。 </param>
        
/// <param name="cType">通道數據類型,是否支持電話線連接(NORMAL或者DIALING)</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。</returns>
        [DllImport("HikServer.dll")]
        
public static extern bool MP4_ServerChangeChanType(char nChannel, char cType);

        
/// <summary>
        
/// 設置回調,重新生成一個I幀。 
        
/// <code>
        
/// 21.  void  __stdcall  MP4_ServerSetCapIFrame(void(CALLBACK *MakeIFrame) (int port)); 
        
/// </code>
        
/// </summary>
        
/// <param name="mf"></param>
        [DllImport("HikServer.dll")]
        
public static extern void MP4_ServerSetCapIFrame(MakeIFrame mf);

        
/// <summary>
        
/// 獲取版本號。
        
/// <code>
        
/// 22.  DWORD  __stdcall  MP4_ServerGetSdkVersion(); 
        
/// </code>
        
/// </summary>
        
/// <returns></returns>
        [DllImport("HikServer.dll")]
        
public static extern ulong MP4_ServerGetSdkVersion();

        
/// <summary>
        
/// 設置每個通道的多播組地址和網絡端口號。
        
///     說明:
        
///     1>目前的多播組採用了兩種方式:一是開發包內部分配,用戶不需要考慮多播組參數細節,默認採用這種
        
///     方式;另一種是調用MP4_ServerCastGroup設置多播組參數。
        
///     2>用戶可以通過MP4_ServerCastGroup修改參數bSet,在兩種方式之間做切換。
        
///     每個多播組會佔用wPort開始的4個端口。
        
/// <code>
        
/// 23.  BOOL  __stdcall  MP4_ServerCastGroup(BOOL bSet,DWORD dChannel, char *sIP, WORD wPort); 
        
/// </code>
        
/// </summary>
        
/// <param name="bSet">是否使用自定義的多播組地址和網絡端口號。TRUE表示使用,FALSE表示仍然沿用開發包內部自動分配的多播地址和網絡端口號。 </param>
        
/// <param name="dChannel">通道號。每個通道號對應的多播組地址和網絡端口號都是單獨設置的。</param>
        
/// <param name="sIP">多播組地址。</param>
        
/// <param name="wPort">多播組網絡端口號</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。 </returns>
        [DllImport("HikServer.dll")]
        
public static extern bool MP4_ServerCastGroup(bool bSet, ulong dChannel, string sIP, ushort wPort);

        
/// <summary>
        
/// 設置每個通道的最大用戶數量。
        
/// <code>
        
/// 24.  BOOL  __stdcall  MP4_ServerMaxUser(DWORD dwChannel,int nMaxNum)
        
/// </code>
        
/// </summary>
        
/// <param name="dwChannel">通道號。</param>
        
/// <param name="nMaxNum">用戶數量。</param>
        
/// <returns>返回TRUE表示成功,返回FALSE表示失敗。</returns>
        [DllImport("HikServer.dll")]
        
public static extern int MP4_ServerMaxUser(uint dwChannel, int nMaxNum);

        
/// <summary>
        
/// 往發送緩存寫數據。網絡開發包通過這個接口獲得板卡的數據。 
        
///     說明:
        
///     現在開發包內部不會直接調用StartVideoCapture和StopVideoCapture函數,而是通過StartCap
        
///     和StopCap來啓動和停止捕獲數據。如果用戶調用StopVideoCapture或者停止調用MP4_ServerWriteDataEx
        
///     都會使客戶端無法收到數據。原來的MP4_ServerWriteData內部調用MP4_ServerWriteDataEx完成相關功能。
        
/// <code>
        
/// 25.  void  __stdcall  MP4_ServerWriteDataEx(DWORD nPort,UCHAR *pPacketBuffer,DWORD nPacketSize,int frameType,int breakable,int nImgFormat)
        
/// </code>
        
/// </summary>
        
/// <param name="nPort">通道號。</param>
        
/// <param name="pPacketBuffer">緩衝區指針。</param>
        
/// <param name="nPacketSize">緩衝區長度。</param>
        
/// <param name="frameType">幀類型。</param>
        
/// <param name="breakable">ReadStreamData的返回值</param>
        
/// <param name="nImgFormat">
        
///     圖像格式。nImgFormat 爲0 時表示發送主通道的音視頻數據
        
///     nImgFormat 爲1 時表示發送子通道的音視頻數據。
        
/// </param>
        [DllImport("HikServer.dll")]
        
//public unsafe static extern void MP4_ServerWriteDataEx(uint nPort, void* pPacketBuffer, uint nPacketSize, int frameType, int breakable, int nImgFormat);
        public static extern void MP4_ServerWriteDataEx(int nPort, IntPtr pPacketBuffer, int nPacketSize, int frameType, int breakable, int nImgFormat);
        
//public static extern void MP4_ServerWriteDataEx(uint nPort, byte[] pPacketBuffer, uint nPacketSize, int frameType, int breakable, int nImgFormat);

    }
}
複製代碼

 

修改記錄 

      1.      2009-8-19,修改了MP4_ServerReadLastMessage,非常感謝 阿斯頓啊 的貢獻!
            修正前:public static extern void MP4_ServerReadLastMessage(string m_sIP, string m_sCommand, out ushort m_wLen);
            修正後:public static extern void MP4_ServerReadLastMessage(StringBuilder m_sIP, StringBuilder m_sCommand, out ushort m_wLen);

結束

     在後續的文章中本文中API仍然可能會變動,畢竟我們用的只是其中的一部分,我會隨時更新,感謝繼續關注。本來是作爲一篇文章發佈的,發現代碼過長,插入都費老半天,所有拆開成上下了!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章