海康雖然提供了 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() 這句話必不可少,用於申請內存;