简介
最近项目中用到霍尼韦尔门禁系统,需要调用其提供的API,由于霍尼韦尔国内的工程师(暂且叫工程师吧,因为真正沟通技术问题时啥也解决不了,说是研发工程师在印度,他们不懂研发)能提供的帮助有限,只能自己摸索,最后终于搞定,现将问题整理一下。
开发语言
我开发使用的语言时C#。
API调用
调用的接口分为DatabaseAPI和ComAPI,前者是数据库的API,后者是通信API。
安装霍尼韦尔的API程序后,在API安装目录会有Demo,但是是C++版本的,并且用VS2017运行报一堆错,调试了一会才运行起来。API默认安装目录为:C:\Program Files (x86)\Honeywell Access Systems
(1)调用DatabaseAPI:引用库文件NCIHelper.dll,这个库文件是C#版本的,所以调用比较方便,引用库文件以后定义一个接口对象:
public static NCIHelperLib.Application app = new ApplicationClass(); // 霍尼接口应用对象
使用app就可以调用相关的接口。在C:\Program Files (x86)\Honeywell Access Systems\WIN-PAK Comm Server API\WPPDemo目录下可以看到C#版本的例子,不过放错了文件夹,这个其实是DatabaseAPI的调用。
(2)调用ComAPI:引用库文件accw.tlb(accw.dll在C#中引用不了,不知道什么原因,最后使用的accw.tlb)
① 定义类WPAVCallBack,实现接口IWPAVCallBack中的GotMessage和ServerError功能:
[ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(IWPAVCallBack))] [ComVisible(true)] public class WPAVCallBack : IWPAVCallBack { public void GotMessage(string bstrTranInfo) { LogHelper.Info(bstrTranInfo); } public void ServerError(string bstrErrorInfo) { LogHelper.Info(bstrErrorInfo); } }要注意函数头引用(这个很重要,否则无法初始化成功)。其中最主要的[ComVisible(true)]表示程序集对COM可见。
②调用InitServer2初始化
public static MTSCBServer server = new MTSCBServer();
WPAVCallBack CMTSCBClient = new WPAVCallBack(); result = server.InitServer2(CMTSCBClient, (int)wpviewTYPE.wpviewAlarmEvent, username, password,"", 1);
③初始化完成后,可调用其他相关函数
总结
本次调试API,有几个坑耽误了很长时间:
① accw.dll无法直接引用,而需要用accw.tlb
② 回调对象的类是IWPAVCallBack接口的实现,而且WPAVCallBack类必须要设置对COM可见。
小天 (2024/1/25 17:28:06)
博主你好,请问你写好的demo可以有偿提供吗