项目中需要能够查询门禁信号和控制门禁设备,因此需要基于大华门禁SDK进行二次开发,开发语言C#。门禁开发中遇到了一些问题,经过与大华技术的邮件沟通也一一解决。做这个开发的时候,发现网上的资料比较少,想着把自己遇到的问题整理下来,让有需要的人尽量少走一些弯路。
1. 门禁状态查询/控制API
- 门禁控制API
BOOL CLIENT_ControlDevice( LLONG lLoginID , CtrlType type , void *param , int waittime = 1000 );- 门禁查询API
BOOL CLIENT_QueryDevState( LLONG lLoginID, int nType, char *pBuf, int nBufLen, int *pRetLen, int waittime=1000 ); nType `NET_DOOR_STATUS_INFO` //门禁状态信息 struct NET_DOOR_STATUS_INFO{ DWORD dwSize; int nChannel; EM_NET_DOOR_STATUS_TYPE emStateType; }; //门禁状态类型 typedef enum __EM_NET_DOOR_STATUS_TYPE{ EM_NET_DOOR_STATUS_UNKNOWN, EM_NET_DOOR_STATUS_OPEN, // 打开 EM_NET_DOOR_STATUS_CLOSE, // 关闭 EM_NET_DOOR_STATUS_BREAK, // 门异常打开};2. 邮件列表
2.1 基于官网SDK开发
从大华官网下载SDK开发包,找到上面的两个接口后,就开始操刀基于官方C# demo开发。设备登陆代码是官方demo提供的,但是门禁设备状态查询总是返回false。跟大华技术支持联系后,提供了新的门禁开发demo。
发件人: DK 发送时间: 2017年9月27日 9:51 收件人: 大华SDK支持 主题: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败 大华大神你好, 我是项目名称平台开发人员,在进行门禁调试时遇到下面的问题,烦请帮忙诊断一下: 1、C#引入接口 [DllImport("dhnetsdk.dll")] public static extern bool CLIENT_QueryDevState(IntPtr lLoginID,int nType,IntPtr pBuf,int nBufLen,ref int pRetLen,int waittime); 2、C#调用 public static bool QueryDevState(IntPtr lLoginID,ref NET_DOOR_STATUS_INFO statusInfo) { var pRetLen = 0; var nBufLen = Marshal.SizeOf(typeof(NET_DOOR_STATUS_INFO)); IntPtr pBuf = IntPtr.Zero; pBuf = Marshal.AllocHGlobal(nBufLen); Marshal.StructureToPtr(statusInfo, pBuf, true); var result = OriginalSDK.CLIENT_QueryDevState(lLoginID, 0x0159, pBuf, nBufLen, ref pRetLen,1000); NetGetLastError(result); return result; } 3、调用结果: result = false error是一个不存在的错误编码,一个很大的负数 **科技集团股份有限公司 我打农村来 187******** 2017-09-27 ============================================================================================ 发件人: 大华SDK支持 发送时间: 2017年9月27日(星期三) 上午10:12 收件人: DK 主题: 答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败 请参照附件Demo进行门禁开发、封装引用。 有问题反馈 设备上下文环境:设备型号、固件版本 问题描述:截图、操作步骤
