日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ActiveX控件

發(fā)布時間:2023/12/14 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ActiveX控件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • ActiveX控件,簡單的說,它就是IE瀏覽器的插件,例如IE的Flash播放器就是一個ActiveX控件。ActiveX存在明顯的安全問題,因為它其實也是一種程序,如果你安裝了某個ActiveX控件,那這個控件就有權(quán)限在你電腦上做很多事情,例如偷偷的監(jiān)控你的網(wǎng)頁瀏覽記錄,在后臺安裝惡意程序,時不時在你電腦上產(chǎn)生彈窗,甚至竊取你的帳號密碼等,正因為這樣,正因為這樣,IE內(nèi)核的瀏覽器有時候會提示你不要加載這些控件;

  • 幸好,ActiveX控件僅僅運行在Windows中,而且僅僅局限與微軟自家的軟件,例如IE瀏覽器,Office等;如果你使用Chrome、Firefox等瀏覽器就不需要擔(dān)心ActiveX控件所可能帶來的危害,因為這些瀏覽器所使用的插件與ActiveX控件屬于不同類別的插件;

  • 1.ActiveX的基本概念

    ?????????ActiveX控件可以看作是一個極小的服務(wù)器應(yīng)用程序,它不能獨立運行,必須嵌入到某個容器程序中,與該容器一起運行。這個容器包括WEB網(wǎng)頁,應(yīng)用程序窗體等。。。

    ???????? ActiveX控件的后綴名是OCX或者DLL。一般是以O(shè)CX和動態(tài)庫共存的形式打包成cab或者exe的文件放在服務(wù)器上,客戶端下載后運行安裝cab或exe解壓成OCX和動態(tài)庫共存的文件,然后注冊ocx文件。

    ???????? ActiveX控件是基于com標(biāo)準(zhǔn),使得軟件部件在網(wǎng)絡(luò)環(huán)境中進(jìn)行交互的技術(shù)集。它與具體的編程語言無關(guān)。作為針對Internet應(yīng)用開發(fā)的技術(shù),ActiveX被廣泛應(yīng)用于WEB服務(wù)器以及客戶端的各個方面。同時,ActiveX技術(shù)也被用于方便地創(chuàng)建普通的桌面應(yīng)用程序,此外ActiveX一般具有界面。

    ?

    2.三個概念:ActiveX、OLE和COM

    ??????? 從時間的角度講,OLE是最早出現(xiàn)的,然后是COM和 ActiveX;從體系結(jié)構(gòu)角度講,OLE和ActiveX是建立在COM之上的,所以COM是基礎(chǔ);單從名稱角度講,OLE、ActiveX是兩個商標(biāo)名稱,而COM則是一個純技術(shù)名詞,這也是大家更多的聽說ActiveX和OLE的原因。COM是應(yīng)OLE的需求而誕生的,所以雖然COM是OLE的基礎(chǔ),但OLE的產(chǎn)生卻在COM之前。COM的基本出發(fā)點是,讓某個軟件通過一個通用的機(jī)構(gòu)為另一個軟件提供服務(wù)。ActiveX最核心的技術(shù)還是COM。ActiveX和OLE的最大不同在于,OLE針對的是桌面上應(yīng)用軟件和文件之間的集成,而 ActiveX則以提供進(jìn)一步的網(wǎng)絡(luò)應(yīng)用與用戶交互為主。COM對象可以用C++、Java和VB等任意一種語言編寫,并可以用DLL或作為不同過程工作的執(zhí)行文件的形式來實現(xiàn)。使用COM對象的瀏覽器,無需關(guān)心對象是用什么語言寫的,也無須關(guān)心它是以DLL還是以另外的過程來執(zhí)行的。從瀏覽器端看,無任何區(qū)別。這樣一個通用的處理技巧非常有用。

    ?

    3.ActiveX控件工程的創(chuàng)建

    ?????? 使用VS2010有兩種方式可以創(chuàng)建ActiveX工程,

    第一種:創(chuàng)建“MFC ActiveX 控件”工程;

    第二種:創(chuàng)建“ATL 項目”。由于使用ATL開發(fā)ActiveX控件需要了解com技術(shù),對程序員的要求也較高,開發(fā)時間也較長,所以如果ActiveX只在windows操作系統(tǒng)下運行,那么就使用“MFC ActiveX 控件”工程來快速建立ActiveX控件。但是這里要注意了:使用“MFC ActiveX 控件”工程來快速建立ActiveX控件,他不僅要建立在windows操作系統(tǒng)下,還必須在windows操作系統(tǒng)下安裝c++依賴庫安裝包,因為MFC是建立在微軟的c++動態(tài)庫的基礎(chǔ)上的。所以這兩種方式各有優(yōu)缺點,根據(jù)項目需求來選擇適合的方式。

    ?

    4.使用VS2010創(chuàng)建MFC ActiveX工程項目步驟

    ???????? 由于使用ATL進(jìn)行ActiveX工程的創(chuàng)建難度比較大,所以這里先使用“MFC ActiveX 控件”工程來創(chuàng)建一個簡單的ActiveX控件。

    ?????? 第一:新建項目-》選擇“MFC ActiveX 控件”工程,給項目命名TestMfcAtlDebug,點擊確定,彈出“控件向?qū)А睂υ捒?/p>

    ??????? 第二:在概述,應(yīng)用程序設(shè)置,控件名稱和控件設(shè)置都可以選擇默認(rèn),然后點擊“完成”,這樣“MFC ActiveX 控件”工程創(chuàng)建完成

    ?

    5.分析“MFC ActiveX 控件”工程的三個重要的類以及對外接口定義文件idl

    使用向?qū)?chuàng)建完工程可以看到自動生成了三個類,TestMfcAtlDebug,TestMfcAtlDebugCtrl和TestMfcAtlDebugPropPage

    可以打開上面三個類的頭文件及cpp文件,發(fā)現(xiàn)它們都是派生類。

    TestMfcAtlDebug:cpp文件中定義了DllRegisterServer和DllUnregisterServer,可以發(fā)現(xiàn)ActiveX的注冊和反組冊都與該類有關(guān)。

    TestMfcAtlDebugCtrl:可以發(fā)現(xiàn)該頭文件中聲明了消息映射(讓ActiveX控件程序可以接受系統(tǒng)發(fā)送的事件通知,如窗體創(chuàng)建和關(guān)閉事件),調(diào)度映射(讓外部調(diào)用程序(包含ActiveX的容器)可以方便地訪問ActiveX控件的屬性和方法),事件映射(讓ActiveX控件可以向外部調(diào)用程序(包含ActiveX的容器)發(fā)送事件通知)。也就是說對ActiveX控件的窗口操作都將在這個類中完成,包括ActiveX控件的創(chuàng)建,重繪,以及在此類中創(chuàng)建可視MFC窗體。

    TestMfcAtlDebugPropPage:顯示ActiveX控件的屬性頁的

    ?

    讓我們來看看最重要的部分:對外接口定義文件TestMfcAtlDebug.idl,代碼如下:

    [cpp]?view plain?copy ? ?
  • #include?<olectl.h>??
  • #include?<idispids.h>??
  • ??
  • [?uuid(69EE37F4-8B36-495F-9F60-5E3AAF2FB494),?version(1.0),??
  • ??control?]??
  • library?TestMfcAtlDebugLib??
  • {??
  • ????importlib(STDOLE_TLB);??
  • ??
  • ????//??CTestMfcAtlDebugCtrl?的主調(diào)度接口??
  • ????[???
  • ????????uuid(6B60346D-5CCD-4907-83F4-51938558A9B7)????
  • ????]??
  • ????dispinterface?_DTestMfcAtlDebug??
  • ????{??
  • ????????properties:??
  • ????????methods:??
  • ??
  • ????????????[id(DISPID_ABOUTBOX)]?void?AboutBox();??
  • ????};??
  • ??
  • ????//??CTestMfcAtlDebugCtrl?的事件調(diào)度接口??
  • ??
  • ????[???
  • ????????uuid(E26ECC46-9BA2-4C25-A4DD-A690560A5113)????
  • ????]??
  • ????dispinterface?_DTestMfcAtlDebugEvents??
  • ????{??
  • ????????properties:??
  • ????????????//??事件接口沒有任何屬性??
  • ??
  • ????????methods:??
  • ????};??
  • ??
  • ????//??CTestMfcAtlDebugCtrl?的類信息??
  • ????[??
  • ????????uuid(DD0CF7EF-A181-428C-B5FC-C44A1C13CA43)??
  • ????]??
  • ????coclass?TestMfcAtlDebug??
  • ????{??
  • ????????[default]?dispinterface?_DTestMfcAtlDebug;??
  • ????????[default,?source]?dispinterface?_DTestMfcAtlDebugEvents;??
  • ????};??
  • ??
  • };??
  • 這個就是對外接口定義文件,如果外部程序想要調(diào)用ActiveX的方法,屬性以及在注冊表注冊的classid(WEB網(wǎng)頁調(diào)用需要使用),就必須了解這個文件,這個文件可以分為四個部分來看:

    首先是TestMfcAtlDebug.Lib這個庫信息

    這個就不做詳解

    第二部分是調(diào)度映射的接口信息,該接口信息包含了屬性(如控件背景色)和對外方法

    里面定義了一個方法AboutBox(),該方法就可以被外部程序調(diào)用,在該接口里定義的函數(shù)都是純虛函數(shù),這些函數(shù)的實現(xiàn)都是在TestMfcAtlDebugCtrl中完成的,MFC通過底層的封裝,讓TestMfcAtlDebugCtrl類繼承這個接口,實現(xiàn)函數(shù)。

    第三部分是事件映射的接口信息

    第四部分是類的信息,其中uuid就是ActiveX控件注冊到注冊表的classid,它是ActiveX注冊后在系統(tǒng)內(nèi)的唯一標(biāo)識,WEB網(wǎng)頁就是使用這個ID加載ActiveX控件的

    ?

    6.定義調(diào)度映射和事件映射方法,提供給外部調(diào)用者使用
    那么怎么定義新的調(diào)度映射和事件映射方法呢,如果手動定義很不方便,當(dāng)然使用編譯器進(jìn)行定義,步驟是打開類視圖:

    可以看到TestMfcAtlDebugLib中有_DTestMfcAtlDebug和_DTestMfcAtlDebugEvents,在_DTestMfcAtlDebug項中可以右鍵-》添加方法(或?qū)傩?#xff09;,該操作是完成調(diào)度映射的方法和屬性的添加;在_DTestMfcAtlDebugEvents項中可以右鍵-》添加方法(或?qū)傩?#xff09;,該操作是完成事件映射的方法和屬性的添加。

    舉個例子,如果要添加一個調(diào)度映射的方法Fuck2(),使得外部可以調(diào)用:

    在_DTestMfcAtlDebug項中可以右鍵-》添加方法,設(shè)置框

    填寫完信息后點擊完成,外部就可以調(diào)用方法Fuck2,同時ActiveX控件項目代碼的內(nèi)部將會在三個文件中新增代碼:

    1.在

    2.在

    3.在

    ?

    7.注冊ActiveX控件

    按照上面的步驟已經(jīng)完成簡單ActiveX控件(無窗體界面的控件)的編寫,重新生成后會在Debug下生成一個TestMfcAtlDebug.ocx的文件,使用windows的dos窗口可以注冊這個ActiveX控件

    步驟:

    首先win+R鍵打開運行,然后輸入注冊命令:regsvr32? c:\.......\TestMfcAtlDebug.ocx(反注冊命令:regsvr32? c:\.......\TestMfcAtlDebug.ocx -u)

    有兩種情況會導(dǎo)致控件注冊失敗:

    第一種:使用非Administrator用戶登入系統(tǒng)會由于權(quán)限不足而無法注冊com組件,這時候就必須使用Administrator用戶登入操作系統(tǒng)

    第二種:ActiveX控件所依賴的dll庫被程序給占用,就會導(dǎo)致注冊失敗,解決辦法是將正在運行的程序關(guān)閉就可以

    ?

    ?8.測試ActiveX控件的方法

    按照上面的步驟已經(jīng)完成ActiveX控件的編寫,也將這個控件注冊成功了,那么怎么測試這個控件呢,有三種方式:

    第一種:使用html網(wǎng)頁來測試

    在TestMfcActiveX.htm的文件中編寫代碼如下:

    [html]?view plain?copy ? ?
  • <HTML>??
  • <HEAD>??
  • <TITLE>Test?ActiveX</TITLE>??
  • </HEAD>??
  • <OBJECT?ID="TestMfcAtl?Control"?WIDTH=528?HEIGHT=545?classid="CLSID:DD0CF7EF-A181-428C-B5FC-C44A1C13CA43">??
  • ????<PARAM?NAME="_Version"?VALUE="65536">??
  • ????<PARAM?NAME="_ExtentX"?VALUE="12806">??
  • ????<PARAM?NAME="_ExtentY"?VALUE="1747">??
  • ????<PARAM?NAME="_StockProps"?VALUE="0">??
  • </OBJECT>??
  • </HTML>??
  • 注意上面的classid就是在idl文件中類的uuid,然后打開這個網(wǎng)頁就會顯示ActiveX控件。上面的classid在控件成功注冊后也可以通過注冊表查找,具體方法是win+R鍵,輸入regedit命令,就會彈出“注冊表編輯器”,位置在“HKET_CLASSES_ROOT”中,根據(jù)你控件的名稱,快速按下前三個字母,然后就可以定位到比較好找的位置,如下圖

    第二種:建立Mfc應(yīng)用程序,在Mfc窗口右鍵-》插入“ActiveX”控件,然后就會在MFC的窗體上顯示ActiveX控件

    第三種:也是最方便的一種方法,就是使用vs自帶的ActiveX Control Test?Container來測試ActiveX控件,但是VS2010在“工具”中沒有這一項,那么我們首先可以手動把這個工具添加到VS2010里,首先找到C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\TstCon.sln,然后使用VS2010打開解決方案TstCon.sln,編譯項目TCProps和TstCon,編譯完成后會在C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\Debug\中生成TstCon.exe執(zhí)行程序,這個執(zhí)行程序就是ActiveX Control Test Container,接下來我們就在VS2010中的工具中添加這個TstCon.exe,在VS2010中的“工具”菜單項中選擇“外部工具”,在彈出的窗體中添加一個新的工具,標(biāo)題為ActiveX Control Test Container,命令為C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\Debug\TstCon.exe,然后點擊確定就可以完成工具的添加了。

    ?

    ?這樣,在“工具”中就有了一個ActiveX Control Test Container,點擊它就會彈出測試ActiveX的容器,如下圖

    點擊Edit->Insert New Control->選擇TestMfcAtlDebug Control,點擊OK

    然后就會顯示這個注冊后的AcitveX控件,如果要測試這個控件的調(diào)度映射的方法Fuck2,就先選中控件,然后點擊Control-》Invoke Methods,在Methods Name下拉框中選擇Fuck2這個方法,點擊Invoke按鈕就可以測試這個方法了,如下圖:

    我們可以看到上面的ActiveX控件是一個空白的背景和一個圈組成的,并沒有窗體界面,那么怎么添加窗體呢?

    ?

    9.向ActiveX控件中添加一個Mfc窗體,就是一個帶界面的ActiveX控件

    ?步驟:

    第一:在資源視圖中新建一個對話框資源

    去掉上邊的“確定”和“取消”按鈕,然后修改對話框?qū)傩?#xff1a;Border改為None,Control改為Ture,ID改為IDD_MAIN_DIALOG,Style改為Child,System改為False,Visible改為True,然后在對話框中雙擊,為對話框添加一個類,如下圖:

    ?

    點擊“完成”。在解決方案資源管理器中新增了一個ViewDialog.h和ViewDialog.cpp這個ViewDialog類就是剛剛我們建立的對話框類

    然后拖一個Edit Control到對話框上,修改其ID為IDC_EDIT_OUTPUT,再拖一個Button到對話框上,此時對話框效果為:

    ?對話框建立完成,接下來就是要把它添加到ActiveX控件中去

    ?

    第二:在TestMfcAtlDebugCtrl.h中定義對話框?qū)嵗齧_VideoDlg

    ?然后在TestMfcAtlDebugCtrl類中定義兩個消息映射:窗體創(chuàng)建完成消息映射和窗體改變大小消息映射

    在VS2010的菜單項“項目”--》“類向?qū)А敝?#xff0c;選擇要添加到的項目和類中,選擇“消息”選項卡,選擇WM_CREATE后點擊”添加處理程序“按鈕和選擇WM_SIZE

    后點擊”添加處理程序“,這樣在“現(xiàn)有的處理程序”中就有OnCreate和OnSize這兩個函數(shù),點擊確定,完成消息映射函數(shù)的添加,如圖:

    ?在TestMfcAtlDebugCtrl.cpp中自動添加下列代碼,如圖:

    ?在OnCreate函數(shù)中編寫如下代碼(Create是在ActiveX控件中創(chuàng)建一個窗體對話框,IDD_VIEW_DIALOG就是剛剛新建的對話框):

    ?在OnSize函數(shù)編寫代碼如下(MoveWindow是確定窗體對話框在ActiveX中的大小):

    ?

    ?第三:重新編譯,注冊ocx,使用ActiveX Control Test Container再次測試該控件

    ?可以發(fā)現(xiàn)這個ActiveX控件中已經(jīng)有了界面了


    總結(jié)

    以上是生活随笔為你收集整理的ActiveX控件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。