C#通過Activex實現Web用戶端讀取RFID

來源:互聯網
上載者:User
 由於要在Web項目中採用RFID讀取功能,所以有必要開發Activex,一般情況下開發Activex都採用VC,VB等,但對這兩塊不是很熟悉,所以採用C#編寫Activex的方式實現。本文方法參考網路1.編寫WindowsFromControls2.發布WindowsFormControls為Activex3.在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 < 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("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)]
publicpartialclass Reader : UserControl,IObjectSafety
{

public Reader()
{
InitializeComponent();
}

#region IObjectSafety 成員

publicvoid GetInterfacceSafyOptions(int riid, outint pdwSupportedOptions, outint pdwEnabledOptions)
{
pdwSupportedOptions =1;
pdwEnabledOptions =2;
}

publicvoid SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
{
thrownew NotImplementedException();
}

#endregion

privatevoid timer1_Tick(object sender, EventArgs e)
{
ReadRfid rfid=new ReadRfid();
string str = rfid.CardNum;
if (str !="")
{
textBox1.Text = str; GetInfo();
}
}
publicint TimerSpan
{
get { return timer1.Interval; }
set { timer1.Interval = value; }
}
publicstring CardNum
{
get { return textBox1.Text; }
}
privatevoid 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中輸入一下代碼即可使用

<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了。

參考文獻http://www.cnblogs.com/yungboy/archive/2011/01/10/1932433.html

源檔案:http://files.cnblogs.com/qidian10/RFIDReader.rar

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.