热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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


由于要在Web项目中采用RFID读取功能,所以有必要开发Activex,一般情况下开发Activex都采用VC,VB等,但对这两块不是很熟悉,所以采用C#编写Activex的方式实现。 本文方法参考网络 1.编写WindowsFromControls 2.发布WindowsFormControls为Activex 3.在web中使用该Activex   首先编写windows控件 如何编写不再详述(注意一个地方,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
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("0CBD6597-3953-4B88-8C9F-F58B1B023413 ")] 
[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互操作注册,打上勾勾  然后编译,如果没有问题,那么测试下,应该可以读取RFID的ID到文本框了。 2.制作安装程序跟普通的制作安装程序一样,新建一个安装程序,然后删掉里面的文件夹。鼠标右键空白区域-》添加-》项目输出--》选择主输出 这样即可生成安装包了。 到现在其实已经可以用了,但为了方便我们可以进一步生成cab包。下载CABARC.exe。解压缩,到bin目录中执行如下doc命令cabarc n 生成的cab名.cab  安装文件.msi  install.infinstall.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中输入一下代码即可使用

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

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

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

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



推荐阅读
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • 本文介绍了在C#中SByte类型的GetHashCode方法,该方法用于获取当前SByte实例的HashCode。给出了该方法的语法和返回值,并提供了一个示例程序演示了该方法的使用。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
author-avatar
幸运我是一阵风些_516
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有