C接口函数定义:
/**********************************************************************
* 函数名称:AhcltSdk_GetResInfoByUsedType
* 功能描述:根据设备用途类型获取资源信息
* 输入参数:u32LogiId:登录ID u8DevUsedType:设备用途类型ID(E_AH_SDK_DEV_USED_TYPE)
* 输出参数:ptInfo:资源信息数组指针
pu32Size:资源信息实际个数
* 返 回 值:错误码
***********************************************************************/
AHCLT_SDK_API UINT32 HOWCALL AhcltSdk_GetResInfoByUsedType(UINT32 u32LogiId, UINT8 u8DevUsedType, OUT T_AH_SDK_RES_INFO** ptInfo, OUT UINT32 *pu32Size);
C结构体定义:
// 资源信息
typedef struct
{
CHAR szObjID[AH_SDK_MAX_ID_LEN]; // 对象ID
UINT8 au8UniqueID[AH_SDK_MAX_UNIQUE_ID_LEN]; // 唯一序列号(用于HiBus防区扩展模块)
UINT8 u8UsedType; // 用途类型 E_AH_SDK_DEV_USED_TYPE
UINT8 u8MainType; // 主类型 E_AH_SDK_DEV_MAIN_TYPE
UINT8 u8SubType; // 子类型 E_AH_SDK_DEV_SUB_TYPE
UINT8 u8DefAreaType; // 防区类型 E_AH_SDK_DEFAREA_TYPE
UINT8 u8BelongSubSysNo; // 从属子系统编号
UINT32 u32LkgSubSysMask; // 关联子系统掩码
UINT16 u16ObjNo; // 防区号/输出号/键盘号
}T_AH_SDK_RES_INFO;
JNA结构体T_AH_SDK_RES_INFO定义:
public class T_AH_SDK_RES_INFO extends Structure {
/**
* \u5bf9\u8c61ID<br>
* C type : CHAR[(13)]
*/
public byte[] szObjID = new byte[13];
/**
* \u552f\u4e00\u5e8f\u5217\u53f7(\u7528\u4e8eHiBus\u9632\u533a\u6269\u5c55\u6a21\u5757)<br>
* C type : UINT8[(8)]
*/
public byte[] au8UniqueID = new byte[8];
/**
* \u7528\u9014\u7c7b\u578b E_AH_SDK_DEV_USED_TYPE<br>
* C type : UINT8
*/
public byte u8UsedType;
/**
* \u4e3b\u7c7b\u578b E_AH_SDK_DEV_MAIN_TYPE<br>
* C type : UINT8
*/
public byte u8MainType;
/**
* \u5b50\u7c7b\u578b E_AH_SDK_DEV_SUB_TYPE<br>
* C type : UINT8
*/
public byte u8SubType;
/**
* \u9632\u533a\u7c7b\u578b E_AH_SDK_DEFAREA_TYPE<br>
* C type : UINT8
*/
public byte u8DefAreaType;
/**
* \u4ece\u5c5e\u5b50\u7cfb\u7edf\u7f16\u53f7<br>
* C type : UINT8
*/
public byte u8BelongSubSysNo;
/**
* \u5173\u8054\u5b50\u7cfb\u7edf\u63a9\u7801<br>
* C type : UINT32
*/
public int u32LkgSubSysMask;
/**
* \u9632\u533a\u53f7/\u8f93\u51fa\u53f7/\u952e\u76d8\u53f7<br>
* C type : UINT16
*/
public short u16ObjNo;
public T_AH_SDK_RES_INFO() {
super();
}
protected List<? > getFieldOrder() {
return Arrays.asList("szObjID", "au8UniqueID", "u8UsedType", "u8MainType", "u8SubType", "u8DefAreaType", "u8BelongSubSysNo", "u32LkgSubSysMask", "u16ObjNo");
}
/**
* @param szObjID \u5bf9\u8c61ID<br>
* C type : CHAR[(13)]<br>
* @param au8UniqueID \u552f\u4e00\u5e8f\u5217\u53f7(\u7528\u4e8eHiBus\u9632\u533a\u6269\u5c55\u6a21\u5757)<br>
* C type : UINT8[(8)]<br>
* @param u8UsedType \u7528\u9014\u7c7b\u578b E_AH_SDK_DEV_USED_TYPE<br>
* C type : UINT8<br>
* @param u8MainType \u4e3b\u7c7b\u578b E_AH_SDK_DEV_MAIN_TYPE<br>
* C type : UINT8<br>
* @param u8SubType \u5b50\u7c7b\u578b E_AH_SDK_DEV_SUB_TYPE<br>
* C type : UINT8<br>
* @param u8DefAreaType \u9632\u533a\u7c7b\u578b E_AH_SDK_DEFAREA_TYPE<br>
* C type : UINT8<br>
* @param u8BelongSubSysNo \u4ece\u5c5e\u5b50\u7cfb\u7edf\u7f16\u53f7<br>
* C type : UINT8<br>
* @param u32LkgSubSysMask \u5173\u8054\u5b50\u7cfb\u7edf\u63a9\u7801<br>
* C type : UINT32<br>
* @param u16ObjNo \u9632\u533a\u53f7/\u8f93\u51fa\u53f7/\u952e\u76d8\u53f7<br>
* C type : UINT16
*/
public T_AH_SDK_RES_INFO(byte szObjID[], byte au8UniqueID[], byte u8UsedType, byte u8MainType, byte u8SubType, byte u8DefAreaType, byte u8BelongSubSysNo, int u32LkgSubSysMask, short u16ObjNo) {
super();
if ((szObjID.length != this.szObjID.length))
throw new IllegalArgumentException("Wrong array size !");
this.szObjID = szObjID;
if ((au8UniqueID.length != this.au8UniqueID.length))
throw new IllegalArgumentException("Wrong array size !");
this.au8UniqueID = au8UniqueID;
this.u8UsedType = u8UsedType;
this.u8MainType = u8MainType;
this.u8SubType = u8SubType;
this.u8DefAreaType = u8DefAreaType;
this.u8BelongSubSysNo = u8BelongSubSysNo;
this.u32LkgSubSysMask = u32LkgSubSysMask;
this.u16ObjNo = u16ObjNo;
}
public T_AH_SDK_RES_INFO(Pointer peer) {
super(peer);
}
public static class ByReference extends T_AH_SDK_RES_INFO implements Structure.ByReference {
};
public static class ByValue extends T_AH_SDK_RES_INFO implements Structure.ByValue {
};
}
JNA接口转换定义:
int AhcltSdk_GetResInfoByUsedType(int u32LogiId, byte u8DevUsedType, PointerByReference ptInfo, IntByReference pu32Size);
JNA调用代码:
IntByReference channelnum = new IntByReference(); //通道资源个数
channelnum.setValue(0);
PointerByReference p = new PointerByReference();
int intResult = sdkLibrary.INSTANCE.AhcltSdk_GetResInfoByUsedType(loginid.getValue(),(byte)1, p, channelnum);
//用于获取结构体长度
T_AH_SDK_RES_INFO tmpInfo = new T_AH_SDK_RES_INFO();
int size = tmpInfo.size();
if(intResult == 0){
T_AH_SDK_RES_INFO[] channellist = new T_AH_SDK_RES_INFO[channelnum.getValue()];//通道资源列表
for(int i =0 ; i < channelnum.getValue(); i++) {
//动态定位结构体指针位置
channellist[i] = new T_AH_SDK_RES_INFO(p.getPointer().getPointer(0).share(i * size));
//读取指针地址的内容到结构体
channellist[i].read();
}
//通知sdk释放内存
sdkLibrary.INSTANCE.AhcltSdk_DestroyResInfoList(p);
}
JNA版本:4.5.1