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