<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    用ATL寫簡單的ActiveX控件 .

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 我正在做的項目需要用讀卡器來讀數據,由于系統是B/S架構的
    所以只能把讀卡器的驅動封裝成一個無界面的ActiveX控件,這樣web頁面中的js代碼才能訪問讀卡器
    其實做起來也挺簡單的,我用的環境是VS2005,步驟如下:
    打開VS2005后:
    1、創建一個ATL Project。 RFID設備管理軟件 Application Setting選擇為:
    Server-Type:Dynamic-Link Library (dll)
    Additional-Options: Allow merging of proxy/stub code
    這里說一句,對于所有只用于web的activex控件,不管有沒有界面,都應該用這兩個選項。 RFID設備管理軟件
    2。選擇菜單“Project->Add Class..”,創建控件類。因為這里要建的是無界面的ActiveX控件,所以選擇
    使用的Class Template為“ATL Simple Object”。之后填寫類名,這里假設為“MyActiveX”。之后的Option選擇為:
    Threading Model: single (對于所有只用于web的ActiveX控件來說,這個選項夠了)
    Interface: Dual
    Aggregration: none (我這個類不需要別的COM組件聚合,所以none足夠了)
    如果需要增加事件支持(類似于DOM中的Event)的話,還應該把Connection Points選上。我這里不需要這個,所以就不選了。
    最后點擊“finish”按鈕完成創建。 RFID設備管理軟件
    3。增加method和property定義。 直接在Class View視圖上右鍵單擊接口IMyActiveX,會彈出一個上下文菜單,通過里面的"ADD->Add Method..."和"ADD->Add Property.."
    菜單項即可自動生成method或者property定義。然后直接寫實現代碼即可。
    注意:最好先搞清楚in/out/retval等參數類型以及BSTR/VARIANT等變量類型的作用和使用方法后再開始寫代碼。否則很容易出現各種問題。 RFID設備管理軟件
    4。編寫完代碼并編譯成dll之后,用regsvr32注冊生成的dll。
    然后寫測試html頁: [html] view plaincopyprint?
    1. <html>  
    2. <body>  
    3. <script type="text/javascript" >  
    4. function doTest() {  
    5. var ret=test.myTestMethod();  
    6. alert(ret);  
    7. }  
    8. </script>  
    9. <object id="test" classid="clsid:21EB133E-EF6C-451B-94AA-EB74C3B2ED12" >  
    10. </object>  
    11. <button onclick="doTest();">lala</button>  
    12. </body>  

    用ie打開測試頁就可以測試我們的ActiveX類了。
    注意:頁面里面定義object時需要一個classid。這個classid可以從工程中的"工程名.idl"文件中得到
    文件最下面會有這樣一段: [html] view plaincopyprint?
    1. library MyActiveXProjectLib  
    2. {  
    3. importlib("stdole2.tlb");  
    4. [  
    5. uuid(21EB133E-EF6C-451B-94AA-EB74C3B2ED12),  
    6. helpstring("MyActiveX Class")  
    7. ]  
    8. coclass CMyActiveX  
    9. {  
    10. [default] interface IMyActiveX;  
    11. };  
    12. };  

    這里面的uuid(21EB133E-EF6C-451B-94AA-EB74C3B2ED12)就是我們要的classid

    5。測試完畢之后就是打包了。 首先要寫包的inf文件。假設文件名為myactivex.inf。內容如下:
    [plain] view plaincopyprint?
    1. [version]   
    2. signature="$CHINA$"   
    3. AdvancedINF=2.0   
    4.   
    5. [Add.Code]   
    6. atl71.dll = atl71.dll   
    7. CardReader.dll = CardReader.dll  
    8.   
    9. [atl71.dll]   
    10. file-win32-x86=thiscab   
    11. FileVersion=7,10,3077,0   
    12. DestDir=11   
    13. RegisterServer=yes   
    14.   
    15. [CardReader.dll]   
    16. file-win32-x86=thiscab   
    17. clsid={21EB133E-EF6C-451B-94AA-EB74C3B2ED12}  
    18. FileVersion=1,0,0,1  
    19. RegisterServer=yes   
    inf文件的具體格式可以參考我的另一篇文章:http://blog.csdn.net/chenyujing1234/article/details/7668570 這里要說明的是,在inf文件中必須包含控件用到的所有dll文件;然后用cabarc程序打包:
    [plain] view plaincopyprint?
    1. cabacr -s 6144 N myactivex.cab atl71.dll CardReader.dll myactivex.inf  

    簽名的問題我還沒完全搞定,搞定再說吧。
    最后在網頁中加入下面的代碼,就可以在沒有注冊此ActiveX控件的電腦上使用這個控件了。
    [html] view plaincopyprint?
    1. <object id="myactivex" classid="clsid:21EB133E-EF6C-451B-94AA-EB74C3B2ED12" codebase="http://url-to-my-server/myactivex.cab">  
    2. </object>  
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全