大华门禁SDK二次开发(一)-技术沟通
项目中需要能够查询门禁信号和控制门禁设备,因此需要基于大华门禁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进行门禁开发、封装引用。
有问题反馈
设备上下文环境:设备型号、固件版本
问题描述:截图、操作步骤
我们再分析下。
2.2 基于新的门禁demo
这次跟上次出现的问题差不多,也是登陆正常,但是状态查询异常,这次又提供了新的门禁开发demo。
发件人: DK
发送时间: 2017年9月27日 15:11
收件人: 大华SDK支持
主题: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
你好,下午调试了一下,有问题,详细错误见附件,你帮忙看一下。
十分感谢。
------------------
**科技集团股份有限公司
我打农村来
187********
2017-09-27
============================================================================================
发件人:大华SDK支持
发送时间:2017年9月27日(星期三) 3:14
收件人:DK
主题:答复: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
设备型号、版本信息再补充提供下。
============================================================================================
发件人:DK
发送时间:2017年9月27日(星期三) 3:20
收件人:大华SDK支持
主题:回复:答复: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
设备型号:DH-ASC1204B
软件版本参考附件
============================================================================================
发件人: 大华SDK支持
发送时间: 2017年9月27日(星期三) 下午4:13
收件人: DK
主题: 转发: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
附件是门禁C# Demo,供参阅。
1卡操作
2查询记录
3监听事件、指纹抓取
看是否覆盖业务,是否够用?
2.3 针对版本的门禁demo
这次有进步,之前门禁状态查询一直返回的是无效的错误码,这次找到了有效的错误码-1。起初以为是Rec NO的问题,后来经电话沟通,确认是没有复制大华的门禁相关dll到调试输出目录下(debug)。把测试demo输出目录的所有dll拷贝到自己的调试输出目录后,功能就正常了。
发件人:DK
发送时间:2017年9月28日(星期四) 2:40
收件人:大华SDK支持
主题:回复:转发: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
你好,我今天试了下昨天发给我的demo:
1、登陆正常;
2、点击get按钮,执行设备查询操作时,返回错误代码-1(未知错误)
操作顺序:点击get按钮-》弹出弹出1(参见附件get按钮弹出1)-》未填写任何信息,点击ok-》弹出错误信息(参见报错信息2)
============================================================================================
发件人:大华SDK支持
时 间:2017年9月28日(星期四) 3:06
收件人:DK
主题:项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
这是查询门禁卡的,要输入Rec NO才行。
============================================================================================
发件人: DK
发送时间: 2017年9月28日 15:42
收件人: 大华SDK支持
主题: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
你好,请问门禁卡的Rec NO如何获取?
============================================================================================
发件人:大华SDK支持
时 间:2017年9月28日(星期四) 3:49
收件人:DK
主题:答复: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
请注意接听电话,我们打了两遍您这边都没接
我打农村来187********
============================================================================================
发件人:DK
时 间:2017年9月28日(星期四) 4:52
收件人:大华SDK支持
主题:回复:答复: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
你好,十分感谢,在您的指导下,已经调试完毕。
2.4 门禁控制结构体
这是个小问题,就是在开发门禁控制功能时,一个结构体找不到,原因是两种语言下的命名方式不一致造成的。
发件人: DK
发送时间: 2017年9月29日 11:13
收件人: 大华SDK支持
主题: 回复:答复: 回复:答复: 项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
你好,
我在做门禁事件监听时,查不到NET_ALARM_ACCESS_LOCK_STATUS_INFO这个结构体的构造,麻烦提供一下。
============================================================================================
发件人:大华SDK支持
时 间:2017年9月29日(星期五) 11:26
收件人:DK
主题:项目名称-netsdk门禁-CLIENT_QueryDevState接口C#调用失败
C#命名规则都以NET开头,和C++的可能不一致
去掉头就能搜到了ALARM_ACCESS_LOCK_STATUS_INFO
2.5 门禁常开、常关
这个功能是后来发现的,现场的一些门是常开的,但是我在大华自己的门禁web系统里看不到这种常开的状态、包括我开发的门禁服务程序里也区分不出来常开的情况。但是DH-ACS 100桌面软件里可以看到门是否常开,因此就想着肯定是有获取门是否常开的接口。查询文档和跟技术支持沟通,只得到了这个设置常开的接口。目前门是否处于常开状态的信号获取未实现。
发件人:DK
发送时间: 2018年4月25日 10:28
收件人: 大华SDK支持
主题: 项目名称-netsdk门禁
你好,
在现场发现了门有常开的状态,想请问下如何查询、控制门禁的常开、常闭状态。
============================================================================================
发件人:大华SDK支持
时 间:2018年4月25日(星期三) 5:16
收件人:DK
主题:答复: 项目名称-netsdk门禁
你好!
编译运行附件demo,可以获取设置门禁常开常闭状态。
3. 调试问题
2.1 CLR20R3异常
门禁服务程序调试完毕后,本地加入CLR连接、配置、类库,并提升.NET版本后,在服务器上运行直接崩溃。且无法进入调试断点,直接运行则报CLR20R3错误,无从入手。
经查,CLR20R3最好的解决办法是查看window日志。
最终解决办法,修改程序编译版本为x86解决问题
(参考地址)。
2.2. BEX64异常
调整编译版本为x86,解决问题。
2.3. 找不到dll
拷贝大华SDk文件夹下的库文件到Release或者debug目录下即可。
3.4. 门开关机制
门禁控制逻辑是这样的:收到开门命令后,触发门锁开门(发出开发消息)并等待2-3秒,然后门会自动锁上(发出关门消息)。我理解常开有两种情况:
- 强制常开:门打开后,一直阻挡门自动锁上;
- 设置常开:设置常开模式,门锁打开后,不在自动锁上。
大华门禁SDK二次开发(一)-技术沟通的更多相关文章
- 大华门禁SDK二次开发(二)-SignalR应用
经过与大华技术支持的沟通,门禁服务程序已经开发好了,可以正常接收门禁开关事件,可以发送开门命令.基于项目实时性要求,这里使用SignalR实现门禁状态.控制命令的实时传送. 几种场景需求 根据Sign ...
- 研究大华3G设备接入自主视频开发平台
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/fengshuiyue/article/details/24311977 近期项目上须要接入3G摄像头 ...
- EasyRTMP实现对接海康、大华等IPCamera SDK进行RTMP推送直播功能
本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603 Demo项目介绍 EasyRTMP Demo代码下载地址https://github.c ...
- VS2015配置海康威视工业相机SDK二次开发
1.概述:工业相机SDK是用于控制相机的一个独立组件,支持获取实时图像数据.配置参数.对图像进行后续处理等功能.工业相机SDK兼容GigE Vision协议.USB3 Vision协议.Camera ...
- 海康相机SDK二次开发只有视频无声音问题
海康SDK相信做企业开发的的同仁,在项目中经常会用到,毕竟使用范围这么广. 本次就开发遇到的奇葩问题来说明一下我们的解决方案. 场景 虽然海康有4200客户端,但是对于高度定制化的项目,肯定不能再使用 ...
- lync sdk 二次开发
1.关于 UI Suppression Mode http://blog.thoughtstuff.co.uk/2014/08/the-6-things-you-need-to-know-about- ...
- SolidWorks二次开发的研究
三维机械设计软件SolidWorks是一套基于Windows的CAD/CAE/CAM/PDM桌面集成系统,是由美国SolidWorks公司在总结和继承大型机械CAD软件的基础上,在Windows环境下 ...
- SilverlightOA源代码(可用于企业级Silverlight项目的二次开发,长年有效)
Silverlight OA系统简介 系统功能简介 l 程序界面介绍: 左侧为主菜单,主菜单可以展开和收起,主菜单下面的所有模块都可以在数据库中扩展增加,模块的权限和用户角色挂钩,可以在数据库中创建多 ...
- Silverlight管理系统源代码(SilverlightOAFlame开发框架主要提供二次开发)
Silverlight OA系统简介 系统功能简介 l 程序界面介绍: 左侧为主菜单,主菜单可以展开和收起,主菜单下面的所有模块都可以在数据库中扩展增加,模块的权限和用户角色挂钩,可以在数据库中创建多 ...
随机推荐
- 「Continuous_integration, CI」为什么要持续集成?
前言 什么是持续集成,为什么要持续集成?本文对持续集成前后两种开发实践做了对比分析,从而直观的感受到持续集成的好处. 在说持续集成之前,先说一下传统的开发模式: 传统模式: 传统模式过程如下: 传 ...
- 【反编译系列】一、反编译代码(dex2jar + jd-gui)和反编译资源(apktool)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! [反编译系列]二.反编译代码(jeb) [反编译系列]三.反编译神器(jadx) [反编译系列]四.反编译so文件(IDA_Pro) 概述 ...
- 命令行中的 vi 模式
命令行中修改已经输入的命令比较麻烦,如果你不知道一些快捷键的话,只能使用方向键一个一个字符地移动到目标位置进行修改,对于比较复杂且过长的命令来说,效率不高. 以下信息来自 bash 的 man 页面: ...
- WebWorker 中将已处理好的 VDOM 数据提交主线程渲染 DOM
上篇文章讲了 WebWorker 的简单用法,其实网上很多类似的文章,我写的也比较垃圾.不会的建议可以网上看比较好点的资料. 这里我会先讲下我的大致思路.然后会贴上一堆不实用的垃圾代码供参考. Web ...
- Android进程间通信(一):AIDL使用详解
一.概述 AIDL是Android Interface Definition Language的缩写,即Android接口定义语言.它是Android的进程间通信比较常用的一种方式. Android中 ...
- Go:学习笔记兼吐槽(1)
Go:学习笔记兼吐槽(1) Go:学习笔记兼吐槽(2) Go:学习笔记兼吐槽(3) 自动添加分号 在很多其他的编程语言中,每一行代码的结尾都必须有分号(假设一行中只有一句代码),Golang 的开 ...
- CopyOnWriteArrayList你都不知道,怎么拿offer?
前言 只有光头才能变强 前一阵子写过一篇COW(Copy On Write)文章,结果阅读量很低啊...COW奶牛!Copy On Write机制了解一下 可能大家对这个技术比较陌生吧,但这项技术是挺 ...
- Docker入门(三)使用Docker Compose
Compose介绍 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 ...
- 学习python的第三天
4.28日总结 一.关于python 1.交互式 说一句解释一句 2.命令行式 1.编写文件并且保存 2.打开python解释器,在pyrhon中打开文本,读入内存(python打开的时候,翻译不是瞬 ...
- 持续集成之应用k8s自动部署
持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...