C#用Activex实现Web客户端读取RFID功能的代码

时间:2021-10-28 21:07:36 

C#用Activex实现Web客户端读取RFID功能的代码

由于要在Web项目中采用RFID读取功能,所以有必要开发Activex,一般情况下开发Activex都采用VC,VB等,但对这两块不是很熟悉,所以采用C#编写Activex的方式实现。

本文方法参考网络

1.编写WindowsFromControls

2.发布WindowsFormControls为Activex

3.在web中使用该Activex

 

首先编写windows控件

C#用Activex实现Web客户端读取RFID功能的代码

如何编写不再详述(注意一个地方,GUID自己用vs工具生成一个,下面会用到。我的0CBD6597-3953-4B88-8C9F-F58B1B023413) 

重要的类:


using System;
using System.Runtime.InteropServices;

namespace RFIDReader
{
public class ReadRfid
{
[DllImport("MasterRD.dll")]
private static extern int rf_init_com(int port, int baud);
[DllImport("MasterRD.dll")]
private static extern int rf_request(short icdev, byte model, ref short TagType);
[DllImport("MasterRD.dll")]
private static extern int rf_write(int icdev, char _Adr, char _Data);
[DllImport("MasterRD.dll")]
private static extern int rf_anticoll(short icdev, byte bcnt, ref byte ppsnr, ref byte pRLength);
[DllImport("MasterRD.dll")]
private static extern int rf_ClosePort();

public string CardNum
{
get { return getCardNum(); }
}
private string getCardNum()
{
int post = 4; //调用COM1口
int baud = 9600;
int i = -1;
byte model = 82;
byte b1 = 4;
short TagType = 4;
byte[] buf1 = new byte[200];
try
{
rf_init_com(post, baud);
rf_request(0, model, ref TagType);
rf_anticoll(0, 4, ref buf1[0], ref b1);
string s1 = "";
for (i = 0; i < b1; i++)
{
s1 = s1 + System.Convert.ToString(long.Parse(buf1[i].ToString()), 16).ToUpper();
}
rf_ClosePort();
if (s1 == "0000")
{ throw (new Exception()); }
return s1;
}
catch (Exception)
{
}
return "";
}

}
}



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace RFIDReader
{
[ComImport, GuidAttribute("<SPAN style="COLOR: #800000">0CBD6597-3953-4B88-8C9F-F58B1B023413</SPAN><SPAN style="COLOR: #800000"> </SPAN>")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
[PreserveSig]
void GetInterfacceSafyOptions(
int riid,
out int pdwSupportedOptions,
out int pdwEnabledOptions);

[PreserveSig]
void SetInterfaceSafetyOptions(
int riid,
int dwOptionsSetMask,
int dwEnabledOptions);
}
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using CJ;
namespace RFIDReader
{
[Guid("0CBD6597-3953-4B88-8C9F-F58B1B023413"), ProgId("RFIDReader.Reader"), ComVisible(true)]
public partial class Reader : UserControl, IObjectSafety
{
public Reader()
{
InitializeComponent();
}
#region IObjectSafety成员
public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}
public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
{
throw new NotImplementedException();
}
#endregion
private void timer1_Tick(object sender, EventArgs e)
{
ReadRfid rfid = new ReadRfid();
string str = rfid.CardNum;
if (str != "")
{
textBox1.Text = str;
GetInfo();
}
}
public int TimerSpan
{
get
{
return timer1.Interval;
}
set
{
timer1.Interval = value;
}
}
public string CardNum
{
get
{
return textBox1.Text;
}
}
private void GetInfo()
{
this.label1.Text = "cccc";
}
}
}


为了能够在所有客户端ie上显示控件,要在程序的AssemblyInfo.cs里添加如下语句
[assembly: AllowPartiallyTrustedCallers()]

下一步,右键该项目,属性,生成,将为com互操作注册,打上勾勾

C#用Activex实现Web客户端读取RFID功能的代码

 

 

然后编译,如果没有问题,那么测试下,应该可以读取RFID的ID到文本框了。

 

2.制作安装程序

跟普通的制作安装程序一样,新建一个安装程序,然后删掉里面的文件夹。

鼠标右键空白区域-》添加-》项目输出--》选择主输出

C#用Activex实现Web客户端读取RFID功能的代码

 

这样即可生成安装包了。

 

到现在其实已经可以用了,但为了方便我们可以进一步生成cab包。

下载CABARC.exe。解压缩,到bin目录中执行如下doc命令

cabarc n 生成的cab名.cab  安装文件.msi  install.inf

install.inf内容如下:

[version] 
signature="$CHICAGO$" 
AdvancedINF=2.0 

[Setup Hooks] 
hook1=hook1
[hook1]
run=msiexec.exe /i "%EXTRACT_DIR%\ReaderInstaller.msi" /qn

修改称自己的安装文件即可

3.在web中使用。

新建一个web项目,在default.aspx中输入一下代码即可使用

<object id="RFIDReader" classid="clsid:0CBD6597-3953-4B88-8C9F-F58B1B023413"
        codebase="RFID/RFIDREADER.cab">
    </object>

这里的clsid就是自己生成的GUID编号

这里的RFID使用的是MasterRD.dll和CFCom.dll不同产品使用可能不同,同时注意RFID的COM端口号,本例为测试例子,所以写死了COM口,客户端IE浏览时,需要将RFID的端口改成对应的。

注意:如果发布到服务器上,客户端ie上无法显示控件,那么请将访问地址添加到ie的受信任站点,如果不能安装cab那么只能用户自己安装Activex了。

参考文献 https://www.jb51.net/article/27115.htm
源文件下载地址:http://xiazai.jb51.net/201105/yuanma/RFIDReader.rar

标签:Activex,RFID
0
投稿

猜你喜欢

  • java多线程加锁以及Condition类的使用实例解析

    2023-08-07 07:25:30
  • java中接口(interface)及使用方法示例

    2021-10-11 10:55:12
  • ObjectMapper 如何忽略字段大小写

    2023-07-31 07:07:18
  • SpringBoot响应处理之以Json数据返回的实现方法

    2023-12-21 12:21:47
  • Java中break、continue、return在for循环中的使用

    2023-03-21 23:36:05
  • java selenium教程环境搭建基于Maven

    2023-11-27 01:35:38
  • 详解C语言内核字符串拷贝与比较

    2023-11-02 15:22:30
  • Java简单实现SpringMVC+MyBatis分页插件

    2023-09-09 23:08:45
  • Java的关键字与保留字小结

    2021-05-30 10:20:50
  • 关于@Autowired注解和静态方法及new的关系

    2021-07-16 13:08:06
  • 对int array进行排序的实例讲解

    2021-12-09 06:51:15
  • Kotlin语言编程Regex正则表达式实例详解

    2023-06-22 02:06:29
  • static关键字有何魔法?竟让Spring Boot搞出那么多静态内部类(推荐)

    2022-07-03 20:26:29
  • java数据结构之希尔排序

    2023-11-08 18:16:18
  • 详解springmvc常用5种注解

    2023-03-27 15:15:43
  • Springboot实现图片上传功能的示例代码

    2022-08-05 22:46:44
  • 引入mybatis-plus报 Invalid bound statement错误问题的解决方法

    2021-06-01 14:28:00
  • SpringBoot 利用thymeleaf自定义错误页面

    2023-11-29 08:29:55
  • 解决Springboot项目启动后自动创建多表关联的数据库与表的方案

    2023-11-24 01:11:27
  • 十分钟速懂java知识点 System类

    2022-11-25 04:19:26
  • asp之家 软件编程 m.aspxhome.com