掩护我送死 2015-08-17 08:56 采纳率: 50%
浏览 2380

C#如何控制多个品牌的IC卡读卡机和门禁设备

希望达到的效果就是:平台发出读卡指令,可以调用任意品牌的ic卡读卡机。调用开门指令可以控制接入平台任意品牌的门锁。
现有条件:可以搭建一个平台,平台定一个通信标准,接入平台的各个品牌的IC卡读卡机,门禁设备要根据通信标准进行改造。
问题:如何定这个通信标准比较合适,各个厂家改动最少。

  • 写回答

1条回答 默认 最新

  • threenewbee 2015-08-17 09:09
    关注

    给你一个简化的原型例子:
    按照如下步骤进行:

    新建一个dll,叫做ReaderBaseLib,这个是一个公共的接口,你的主程序和所有的插件都引用它。

    在里面编写如下的代码:

    public interface IReaderBase
    {
    int GetID();
    }

    编译。

    然后编写一个实现dll,新建一个类库,叫ReaderALib
    项目 添加引用 引用ReaderBaseLib
    编写代码
    public class Reader : IReaderBase
    {
    public int GetID
    {
    //实现代码
    return 1;
    }
    }
    注意,修改namespace为 Reader

    如法炮制,写一个ReaderBLib的dll

    public class Reader : IReaderBase
    {
    public int GetID
    {
    //实现代码
    return 2;
    }
    }
    也把命名空间修改为Reader

    新建一个exe项目作为主程序,引用 IReaderBase,注意,不要引用 ReaderA ReaderB
    为了简化起见,读取配置文件的代码省略,这里直接从字符串读取

    void Main()
    {
    string dllname = "ReaderALib.dll";
    Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "\" + dllname);
    object instance = assembly.CreateInstance("Reader.Reader");
    IReaderBase r = instance as IReaderBase;
    Console.WriteLines(r.GetID());
    }

    把所有的dll exe放在一起运行
    注意,把程序里的ReaderALib.dll修改为ReaderBLib.dll,输出就变成2了。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器