海康: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() 这句话必不可少,用于申请内存;

原文地址:https://www.cnblogs.com/huiy/p/13647676.html