海康:java sdk 自定義方法與結構體


海康雖然提供了 Java demo,但是只提供了少量接口,大量的接口方法及結構體定義需要自己去完成,

今天以獲得設備能力集為例,說說如何做!

1.定義結構體

海康 C++:

NET_DVR_MATRIX_ABILITY_V41
解碼器能力集結構體。

struct{
  DWORD                     dwSize;
  BYTE                      byDspNums;
  BYTE                      byDecChanNums;
  BYTE                      byStartChan;
  BYTE                      byRes1[5];
  NET_DVR_DISPINFO          struVgaInfo;
  NET_DVR_DISPINFO          struBncInfo;
  NET_DVR_DISPINFO          struHdmiInfo;
  NET_DVR_DISPINFO          struDviInfo;
  NET_DVR_DISPWINDOWMODE    struDispMode[MAX_DISPNUM_V41];
  NET_DVR_SCREENINFO        struBigScreenInfo;
  BYTE                      bySupportAutoReboot;
  BYTE                      byRes2[119];
}

根據上面的,改為java版本:

/**
   * 解碼器能力集結構體。
   *
   */
  public static class NET_DVR_MATRIX_ABILITY_V41 extends Structure {
    public int dwSize;
    public byte byDspNums;
    public byte byDecChanNums;
    public byte byStartChan;
    public byte[] byRes1 = new byte[5];
    public NET_DVR_DISPINFO struVgaInfo;
    public NET_DVR_DISPINFO struBncInfo;
    public NET_DVR_DISPINFO struHdmiInfo;
    public NET_DVR_DISPINFO struDviInfo;
    public NET_DVR_DISPWINDOWMODE[] struDispMode = new NET_DVR_DISPWINDOWMODE[MAX_DISPNUM_V41];
    public NET_DVR_SCREENINFO struBigScreenInfo;
    public byte bySupportAutoReboot;
    public byte[] byRes2 = new byte[119];
  }

C++ 數據類型 與 JAVA的對應關系:

https://www.cnblogs.com/huiy/p/9844007.html

1.定義接口方法

海康 C++:

NET_DVR_GetDeviceAbility
獲取設備能力集。

BOOL NET_DVR_GetDeviceAbility(
  LONG     lUserID,
  DWORD    dwAbilityType,
  char     *pInBuf,
  DWORD    dwInLength,
  char     *pOutBuf,
  DWORD    dwOutLength
);

java:

/**
   * 獲得設備能力集
   * 
   * @param lUserID
   * @param dwAbilityType
   * @param pInBuf
   * @param dwInLength
   * @param pOutBuf
   * @param dwOutLength
   * @return
   */
  boolean NET_DVR_GetDeviceAbility(NativeLong lUserID, int dwAbilityType, Pointer pInBuf, int dwInLength,
      Pointer pOutBuf, int dwOutLength);


注意:指針類型的一律定義成Pointer。

主要調用代碼:

System.out.println("登錄成功");
    NET_DVR_MATRIX_ABILITY_V41 struDecoderCapability = new NET_DVR_MATRIX_ABILITY_V41();
    struDecoderCapability.dwSize=struDecoderCapability.size();
    struDecoderCapability.write();
    boolean booResult = hCNetSDK.NET_DVR_GetDeviceAbility(lUserID, MERGEDEV_ABILITY, null, 0,
        struDecoderCapability.getPointer(), struDecoderCapability.size());

struDecoderCapability.write() 這句話必不可少,用於申請內存;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM