熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#用Activex實現Web客戶端讀取RFID功能

2013-11-13 10:26:42  來源: .NET編程 

  

  由於要在Web項目中采用RFID讀取功能所以有必要開發Activex一般情況下開發Activex都采用VCVB等但對這兩塊不是很熟悉所以采用C#編寫Activex的方式實現
    本文方法參考網絡
    編寫WindowsFromControls
    發布WindowsFormControls為Activex
    在web中使用該Activex
    首先編寫windows控件

   
    如何編寫不再詳述(注意一個地方GUID自己用vs工具生成一個下面會用到我的CBDBCFFBB
    重要的類
    using System;
    using SystemRuntimeInteropServices;
    namespace RFIDReader
    {
    public class ReadRfid
    {
    [DllImport(MasterRDdll)]
    private static extern int rf_init_com(int port int baud);
    [DllImport(MasterRDdll)]
    private static extern int rf_request(short icdev byte model ref short TagType);
    [DllImport(MasterRDdll)]
    private static extern int rf_write(int icdev char _Adr char _Data);
    [DllImport(MasterRDdll)]
    private static extern int rf_anticoll(short icdev byte bcnt ref byte ppsnr ref byte pRLength);
    [DllImport(MasterRDdll)]
    private static extern int rf_ClosePort();
    public string CardNum
    {
    get
    { return getCardNum(); }
    }
    private string getCardNum()
    {
    int post = ; //調用COM口   int baud = ;
    int i = ;
    byte model = ;
    byte b = ;
    short TagType = ;
    byte[] buf = new byte[];
    try
    {
    rf_init_com(post baud);
    rf_request( model ref TagType);
    rf_anticoll( ref buf[] ref b);
    string s = ;
    for (i = ; i < b; i++)
    {
    s = s + SystemConvertToString(longParse(buf[i]ToString()) )ToUpper();
    }
    rf_ClosePort();
    if (s == )
    { throw (new Exception()); }
    return s;
    }
    catch (Exception)
    {
    }
    return ;
    }
    }
    }
    view sourceprint?
    using System;
    using SystemCollectionsGeneric;
    using SystemLinq;
    using SystemText;
    using SystemRuntimeInteropServices;
    namespace RFIDReader
    {


    [ComImport GuidAttribute(<SPAN >CBDBCFFBB</SPAN><SPAN > </SPAN>)]   [InterfaceTypeAttribute(ComInterfaceTypeInterfaceIsIUnknown)]
    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 SystemCollectionsGeneric;using SystemComponentModel;
    using SystemDrawing;
    using SystemData;
    using SystemLinq;
    using SystemText;
    using SystemWindowsForms;
    using SystemRuntimeInteropServices;  using CJ;
    namespace RFIDReader{
    [Guid(CBDBCFFBB) ProgId(RFIDReaderReader) ComVisible(true)]
    public partial class Reader : UserControlIObjectSafety
    {
    public Reader()
    {
    InitializeComponent();
    }
    #region IObjectSafety 成員
    public void GetInterfacceSafyOptions(int riid out int pdwSupportedOptions out int pdwEnabledOptions)
    {
    pdwSupportedOptions = ;
    pdwEnabledOptions = ;
    }
    public void SetInterfaceSafetyOptions(int riid int dwOptionsSetMask int dwEnabledOptions)
    {
    throw new NotImplementedException();
    }
    #endregion
    private void timer_Tick(object sender EventArgs e)
    {
    ReadRfid rfid=new ReadRfid();
    string str = rfidCardNum;
    if (str != )
    {
    textBoxText = str; GetInfo();
    }
    }
    public int TimerSpan
    {
    get { return timerInterval; }
    set { timerInterval = value; }
    }        public string CardNum
    {
    get { return textBoxText; }
    }
    private void GetInfo()
    {
    thislabelText = cccc;
    }
    }
    }
    為了能夠在所有客戶端ie上顯示控件要在程序的AssemblyInfocs裡添加如下語句
    [assembly: AllowPartiallyTrustedCallers()]
    下一步右鍵該項目屬性生成將為com互操作注冊打上勾勾

   
    然後編譯如果沒有問題那麼測試下應該可以讀取RFID的ID到文本框了
    制作安裝程序
    跟普通的制作安裝程序一樣新建一個安裝程序然後刪掉裡面的文件夾
    鼠標右鍵空白區域》添加》項目輸出》選擇主輸出

   
    這樣即可生成安裝包了
    到現在其實已經可以用了但為了方便我們可以進一步生成cab包
    下載CABARCexe解壓縮到bin目錄中執行如下doc命令
    cabarc n 生成的cab名cab 安裝文件msi installinf
    installinf內容如下
    [version]
    signature=$CHICAGO$
    AdvancedINF=
    [Setup Hooks]
    hookhook=hook
    [hook]
    run=msiexecexe /i %EXTRACT_DIR%\ReaderInstallermsi /qn
    修改稱自己的安裝文件即可
    在web中使用
    新建一個web項目在defaultaspx中輸入一下代碼即可使用
    <object id=RFIDReader classid=clsid:CBDBCFFBB
    codebase=RFID/RFIDREADERcab>
    </object> 這裡的clsid就是自己生成的GUID編號
    這裡的RFID使用的是MasterRDdll和CFComdll不同產品使用可能不同同時注意RFID的COM端口號本例為測試例子所以寫死了COM口客戶端IE浏覽時需要將RFID的端口改成對應的
    注意如果發布到服務器上客戶端ie上無法顯示控件那麼請將訪問地址添加到ie的受信任站點如果不能安裝cab那麼只能用戶自己安裝Activex了
    原文鏈接


From:http://tw.wingwit.com/Article/program/net/201311/13644.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.