|
ActiveX DLL 可以用來保護(hù)代碼的一些部分,因?yàn)樽鳛殚_發(fā)人員我們知道,用ASP進(jìn)行工作時(shí),源代碼控制是一個(gè)艱難而瑣碎的過程。ActiveX DLL 是經(jīng)過編譯的代碼,沒有工程文件中的源代碼就不能對其進(jìn)行修改。這就給開發(fā)人員帶來許多可能:開發(fā)自動操作公共程序的程序并將它們作為共享軟件來分發(fā),分發(fā)至少有一些源代碼保護(hù)的ASP應(yīng)用程序,不斷開發(fā)自己的ASP程序指令,以在一個(gè)全方位多功能的結(jié)果中提高ASP的性能。
你所安裝的第一個(gè)ActiveX DLL 文件將注冊并安裝Visual Basic 6 的運(yùn)行時(shí)間文件,它允許運(yùn)行經(jīng)過編譯的代碼。但是要注意,這還要求重新啟動服務(wù)器。當(dāng)一個(gè)現(xiàn)存的DLL被安裝并使用之后,如果想要對其進(jìn)行升級, 服務(wù)器就將給出一個(gè)錯誤信息提示,說此文件正被另一個(gè)過程所使用。要糾正這一問題,也要重新啟動服務(wù)器后才能完成DLL的升級。請記住在開發(fā)中要使用一個(gè)測試環(huán)境。
雖然這個(gè)例子非常簡單,用一個(gè)ASP包含文件就可以輕易地實(shí)現(xiàn),但當(dāng)開發(fā) ActiveX DLL 時(shí),你可以使用 Visual Basic 的全套基本指令、系統(tǒng)外殼指令以及所有控制臺所能進(jìn)行的操作,因此也就允許在線網(wǎng)站和內(nèi)部互聯(lián)網(wǎng)的全部自動控制。這樣就把原來用ASP包含文件實(shí)現(xiàn)的 ActiveX DLL 的性能進(jìn)行了拓展。
在用組合框選擇填充的數(shù)據(jù)庫域中存儲查詢關(guān)鍵字的值,提高數(shù)據(jù)的完整性,輕易地在整個(gè)數(shù)據(jù)庫中進(jìn)行層疊式更新,這些都是很普通的操作。舉例來說,現(xiàn)在有一個(gè)拼寫錯誤的文本描述,可以在查循表中進(jìn)行修改,所有選擇了這個(gè)描述的相關(guān)條目都會自動地修改,因?yàn)槲覀円呀?jīng)存儲了與這個(gè)描述相關(guān)的數(shù)字。組合框以查詢表的內(nèi)容為基礎(chǔ),這些內(nèi)容將查詢關(guān)鍵字的值與其描述聯(lián)系起來,如果系統(tǒng)使用了許多查詢的話,產(chǎn)生這些組合框的代碼會變得非常重復(fù)。本文用 ActiveX DLL 來簡化創(chuàng)建HTML組合框的程序,用一個(gè)數(shù)據(jù)庫查詢表中的內(nèi)容進(jìn)行填充。例子中的表名為lookup_table,它有以下域:
Lookup_Key: 存儲在數(shù)據(jù)庫中的值 Lookup_Field: 對查詢元素進(jìn)行分類 Lookup_Description: 顯示在組合框中的描述 要創(chuàng)建ActiveX DLL,步驟如下:
開始一個(gè)新的visual basic 工程文件; 選擇ActiveX DLL 作為工程文件類型; 在Properties 窗口,命名類模塊和工程文件。將工程文件命名為keiths_lookup ,將模塊命名為lookup 。 ASP引用DLL函數(shù)時(shí)要使用這些名字。以后在ASP碼中,將要引用一個(gè)名為keiths_lookup.lookup的服務(wù)器對象。 用同樣的名字保存工程文件和模塊,其中工程文件的擴(kuò)展名為.vbp ,類模塊的擴(kuò)展名為.cls 。在本例中 工程文件的名字為keiths_lookup,模塊的名字為lookup。 在工程菜單中,選擇References 。這是你可以使用的其它應(yīng)用程序?qū)ο蟆T诒纠校瑱z查Microsoft ActiveX data objects 2.0 庫和Microsoft ActiveX Data Objects Recordset 2.0 庫。 在包含查詢表的IIS服務(wù)器數(shù)據(jù)庫中創(chuàng)建一個(gè)名為Sumnet 的數(shù)據(jù)集。這個(gè)數(shù)據(jù)庫沒有用戶名和口令。
現(xiàn)在可以鍵入以下代碼:
Public Function html_combo(comboname As String, Lookup_field As String) As String
Dim outstring As String Dim conn As ADODB.Connection Dim rst As ADODB.Recordset Dim sqlstring As String
Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
Sqlstring = "SELECT [Lookup_Description],[Lookup_Key] FROM [Lookup_Table] WHERE [Lookup_Field] = '" & Lookup_Field & "'"
conn.Open "DSN=Sumnet;UID=;PWD=.;" rst.Open sqlstring, conn, 3, 3 If Not rst.EOF Then rst.MoveFirst outstring = "< Select name='" & comboname & "' >" Do While Not rst.EOF outstring = outstring & "< Option Value='" & rst.Fields("lookup_key") & "' >" & _ rst.Fields("lookup_description") & "< /Option > " rst.MoveNext Loop End If
outstring = outstring & "< /Select >" html_combo = outstring rst.Close conn.Close
End Function
然后,保存工程文件和類模塊。
編譯工程文件的步驟如下:
啟動Visual Studio 6.0 工具中的Package Deployment Wizard ; 選擇剛才創(chuàng)建的ActiveX 工程文件; 點(diǎn)擊Package; 選擇打包腳本名或使用默認(rèn)值; 選擇Standard Setup ; 選擇一個(gè)放置安裝文件的文件夾; 選擇單個(gè)cab; 點(diǎn)擊Next使用其它默認(rèn)選項(xiàng); 在IIS服務(wù)器上運(yùn)行setup。
現(xiàn)在可以通過ASP代碼使用DLL,因?yàn)樵谙到y(tǒng)數(shù)據(jù)庫中它已經(jīng)被注冊了。下面的ASP代碼將使用所創(chuàng)建的LL內(nèi)部的函數(shù)。它將產(chǎn)生三個(gè)組合框,一個(gè)用州來填充,一個(gè)用位置填充,另外一個(gè)用年齡組。第一個(gè)參數(shù)將成為網(wǎng)頁上的對象名,第二個(gè)參數(shù)是用來填充組合框中查詢域的值。
< %@ Language="VBSCRIPT" % > < % Set look = Server.CreateObject("keiths_lookup.lookup") % >
< HTML >< BODY >
< %=look.html_combo("State","States")% > < %=look.html_combo("Position","Positions")% > < %=look.html_combo("Age_group","Age_Groups")% >
< /BODY > < /HTML >
這個(gè)例子非常簡單。通過使用更多的參數(shù),如表名、域名等,可以創(chuàng)建許多便攜式的函數(shù),這些函數(shù)可以用在你的工作中所遇到的各種各樣的應(yīng)用程序中。
因?yàn)檫@些代碼是在服務(wù)器一端水平上運(yùn)行的,所以客戶機(jī)不需要安裝任何東西。這僅僅是用ActiveX DLL所能實(shí)現(xiàn)的功能的小小的例子。只需要一點(diǎn)點(diǎn)努力,就可以得到一個(gè)在網(wǎng)絡(luò)用戶中不同凡響的多功能應(yīng)用程序。 (出處:熱點(diǎn)網(wǎng)絡(luò))
|