ActiveX控件用於Web的過程是將控件嵌入主頁中,用戶通過瀏覽器訪問該主頁時,將主頁中的控件下載,並在用戶機器上注冊,以后就可在用戶的瀏覽器上運行。控件下載一次后就駐留在用戶本地機器上,下次再訪問相同的主頁時,可不再下載該控件,而是直接運行用戶本地的控件。
一:vc創建activex控件
創建一個activex控件,名稱為:test.ocx,創建步驟略。顯示結果如下:
為該控件增加一個方法void GetStr(LPCTSTR str),
該方法內部代碼如下:
這樣,GetStr方法就被加入了。
onDraw函數下代碼如下
下面,測試該方法,鼠標右鍵控件,選擇Invoke Methods,彈出如下對話框:
在parameter中輸入hello,單擊Invoke按鈕,顯示如下:
那么如何在網頁中將參數傳遞給控件,讓其在網頁中顯示出來呢??稍后介紹
把test.ocx控件放入c:\ceshi目錄下,到網上下載Makecert.exe,Cert2Spc.exe,Signcode.exe,並一同放入c:\ceshi目錄下
二:ActiveX打包與發布
1)用到的工具如下所示:
1.Makecert.exe ---證書創建工具
2.Cert2Spc.exe ---發行者證書測試工具
3.Signcode.exe ---文件簽名工具
2)ActiveX發布步驟
打包activeX需要制作證書,具體用到makecert 、cert2spc 、signtool這三個工具,
現在我們將以上工具和.ocx控件放到同一個目錄c:\test下.
(1)單擊"開始"-->"運行(R)"-->輸入"cmd"-->回車-->進入到操作的控件所在的目錄(需要將上面所說的工具,和ocx控件放到一個文件夾下);
(2)創建inf文件,代碼如下
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
test.ocx=test.ocx
[test.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={B649E664-D7CF-4481-A58E-AC8B4440794A}
DestDir=11
FileVersion=1,0,0,1
上述代碼解釋如下:
file-win32-x86=thiscab
//告訴ie到哪里去得到這個dll,file一共包括三個部分,第一部分是file,這個永遠都是這樣的(至少目前來說);第二部分告訴聲明支持的OS,win32表示windows,mac就是蘋果MAC OX了;第三部分是CPU類型,比如說x86、 ppc (Power PC)、 mips或者alpha了 。其中“thiscab”是一個關鍵字,表示 CAB 包含此 DLL,也可通過指定一條絕對或相對路徑,從一個 HTTP 位置下載所需的 DLL,
例如: file-win32-x86=http://www.mysite.com/mydir/NEEDED.DLL
clsid={ B649E664-D7CF-4481-A58E-AC8B4440794A }
//“clsid”是將要安裝的控件的 CLSID , 如何獲得呢------
DestDir=11
//它的值是dll將要存到本地硬盤的位置,如果它的值是10,則將dll放到\Windows或者\WinNT下;如果是11,則放到\Windows\System或者\WinNT\System32下;如果未指定任何 DestDir(典型情況),則代碼安裝在固定的 OCCACHE 目錄中。
FileVersion=1,0,0,1
//說明了atl90.dll的版本號
(3)將inf和dll打包成cab
cabarc n test.cab test.inf test.ocx這樣就將其打包成test.cab
(4) 生成cert證書
為得到簽名用的spc格式
makecert /sv "test.pvk" /n "cn=test" test.cer
執行過程中會要求輸入密碼,密碼要一致,如下圖所示
(5) 生成.spc文件
cert2spc test.cer test.spc之后,就在其目錄中多了一個test.spc文件
(6) 對cab文件進行簽名
運行singcode signwizard,此時會彈出對話框,操作如圖所示:
直接按下一步
找到指定目錄下的.cab文件
選擇自定義
選擇“從文件選擇”選項
下一步
按瀏覽找到.pvk文件
選擇md5
;默認直接按下一步
不填,下一步
不填,下一步
按完成
(7)
下面是一個嵌有ActiveX控件test的HTML代碼示例:
<HTML>
<HEAD>
<TITLE>New Page</TITLE>
</HEAD>
<BODY>
<object classid="clsid:BFB6032F-6F8D-4B7F-B0B3-6303D08348A4"id="test" CODEBASE="http://www.microdraw.com/down/microdrawocx.cab#version=1,0,0,1"
WIDTH=400
HEIGHT=200
ALIGN=center
</object>
</BODY>
</HTML>
千萬要注意:classid是可以從注冊表中查到,也可以從vc源代碼中獲取,打開test.odl文件,id如下所示:
這樣,一個網頁就創建成功啦!!!
最后,c:\test中有如下文件:
打開test.htm網頁顯示結果如下:
三:網頁中參數傳遞
接下來,來完成最核心的東西,從網頁中傳遞參數到控件顯示:
修改html代碼如下:
<HTML>
<HEAD>
<TITLE>MyActiveX - Methods, Properties, and Events</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function PassParameter()
{
if (StringInput.value != " ")
{
test.GetStr(StringInput.value);
}
}
</SCRIPT>
</HEAD>
<BODY>
<center>
MyActiveX - Methods, Properties, and Events Example
<p></p>
<OBJECT ID="test" WIDTH=350 HEIGHT=50
CLASSID="CLSID: BFB6032F-6F8D-4B7F-B0B3-6303D08348A4">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<p></p>
Input Parameter: <INPUT TYPE ="text" NAME="StringInput" VALUE=" ">
<p></p>
<INPUT TYPE="button" NAME="Submit"
VALUE="Submit" ONCLICK=PassParameter()>
</SCRIPT>
</center>
</BODY>
如上述代碼所示,我們在JavaScript中寫入函數PassParameter,該函數調用了控件中的方法GetStr,
當鼠標點擊按鈕submit時,就會調用該函數,進而間接調用該方法。
在編輯框中輸入hello,單擊submit,顯示結果如下: