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

时间:2021-05-02

本文介绍了在C#中使用Activex实现Web客户端读取RFID功能。

由于要在Web项目中采用RFID读取功能,所以有必要开发Activex,一般情况下开发Activex都采用VC,VB等,而本文采用C#编写Activex的方式实现。

本文方法参考网络

1.编写WindowsFromControls

2.发布WindowsFormControls为Activex

3.在web中使用该Activex

1、编写windows控件

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

重要的类:

  • usingSystem;
  • usingSystem.Runtime.InteropServices;
  • namespaceRFIDReader
  • {
  • publicclassReadRfid
  • {
  • [DllImport("MasterRD.dll")]
  • privatestaticexternintrf_init_com(intport,intbaud);
  • [DllImport("MasterRD.dll")]
  • privatestaticexternintrf_request(shorticdev,bytemodel,refshortTagType);
  • [DllImport("MasterRD.dll")]
  • privatestaticexternintrf_write(inticdev,char_Adr,char_Data);
  • [DllImport("MasterRD.dll")]
  • privatestaticexternintrf_anticoll(shorticdev,bytebcnt,refbyteppsnr,refbytepRLength);
  • [DllImport("MasterRD.dll")]
  • privatestaticexternintrf_ClosePort();
  • publicstringCardNum
  • {
  • get{returngetCardNum();}
  • }
  • privatestringgetCardNum()
  • {
  • intpost=4;//调用COM1口
  • intbaud=9600;
  • inti=-1;
  • bytemodel=82;
  • byteb1=4;
  • shortTagType=4;
  • byte[]buf1=newbyte[200];
  • try
  • {
  • rf_init_com(post,baud);
  • rf_request(0,model,refTagType);
  • rf_anticoll(0,4,refbuf1[0],refb1);
  • strings1="";
  • for(i=0;i<b1;i++)
  • {
  • s1=s1+System.Convert.ToString(long.Parse(buf1[i].ToString()),16).ToUpper();
  • }
  • rf_ClosePort();
  • if(s1=="0000")
  • {throw(newException());}
  • returns1;
  • }
  • catch(Exception)
  • {
  • }
  • return"";
  • }
  • }
  • }
  • view sourceprint?

  • usingSystem;
  • usingSystem.Collections.Generic;
  • usingSystem.Linq;
  • usingSystem.Text;
  • usingSystem.Runtime.InteropServices;
  • namespaceRFIDReader
  • {
  • [ComImport,GuidAttribute("<SPANstyle="COLOR:#800000">0CBD6597-3953-4B88-8C9F-F58B1B023413</SPAN>
  • <SPANstyle="COLOR:#800000"></SPAN>")]
  • [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  • publicinterfaceIObjectSafety
  • {
  • [PreserveSig]
  • voidGetInterfacceSafyOptions(
  • intriid,
  • outintpdwSupportedOptions,
  • outintpdwEnabledOptions);
  • [PreserveSig]
  • voidSetInterfaceSafetyOptions(
  • intriid,
  • intdwOptionsSetMask,
  • intdwEnabledOptions);
  • }
  • }
  • usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;
  • usingSystem.Drawing;
  • usingSystem.Data;
  • usingSystem.Linq;
  • usingSystem.Text;
  • usingSystem.Windows.Forms;
  • usingSystem.Runtime.InteropServices;
  • usingCJ;
  • namespaceRFIDReader{
  • [Guid("0CBD6597-3953-4B88-8C9F-F58B1B023413"),ProgId("RFIDReader.Reader"),ComVisible(true)]
  • publicpartialclassReader:UserControl,IObjectSafety
  • {
  • publicReader()
  • {
  • InitializeComponent();
  • }
  • #regionIObjectSafety成员
  • publicvoidGetInterfacceSafyOptions(intriid,outintpdwSupportedOptions,outintpdwEnabledOptions)
  • {
  • pdwSupportedOptions=1;
  • pdwEnabledOptions=2;
  • }
  • publicvoidSetInterfaceSafetyOptions(intriid,intdwOptionsSetMask,intdwEnabledOptions)
  • {
  • thrownewNotImplementedException();
  • }
  • #endregion
  • privatevoidtimer1_Tick(objectsender,EventArgse)
  • {
  • ReadRfidrfid=newReadRfid();
  • stringstr=rfid.CardNum;
  • if(str!="")
  • {
  • textBox1.Text=str;GetInfo();
  • }
  • }
  • publicintTimerSpan
  • {
  • get{returntimer1.Interval;}
  • set{timer1.Interval=value;}
  • }publicstringCardNum
  • {
  • get{returntextBox1.Text;}
  • }
  • privatevoidGetInfo()
  • {
  • this.label1.Text="cccc";
  • }}}
  • 为了能够在所有客户端ie上显示控件,要在程序的AssemblyInfo.cs里添加如下语句

    [assembly: AllowPartiallyTrustedCallers()]

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

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

    2.制作安装程序

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

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

    这样即可生成安装包了。

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

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

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

    install.inf内容如下:

  • [version]
  • signature="$CHICAGO$"
  • AdvancedINF=2.0
  • [SetupHooks]
  • hook1hook1=hook1
  • [hook1]
  • run=msiexec.exe/i"%EXTRACT_DIR%\ReaderInstaller.msi"/qn
  • 修改成自己的安装文件即可

    3.在web中使用。

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

  • <objectid="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了。

    原文链接:http:///qidian10/archive/2011/04/06/2006976.html

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章