C#实现调用霍尼韦尔ComAPI

简介

最近项目中用到霍尼韦尔门禁系统,需要调用其提供的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可见。

—— 完 ——
相关推荐
评论
  1. # 1

    小天 (2024/1/25 17:28:06)

    博主你好,请问你写好的demo可以有偿提供吗

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花