在ASP中編寫DLL的問題
發(fā)表時間:2024-05-14 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]ActiveX DLL 可以用來保護(hù)代碼的一些部分,因?yàn)樽鳛殚_發(fā)人員我們知道,用ASP進(jìn)行工作時,源代碼控制是一個艱難而瑣碎的過程。ActiveX DLL 是經(jīng)過編譯的代碼,沒有工程文件中的源代碼就不能對其進(jìn)行修改。這就給開發(fā)人員帶來許多可能:開發(fā)自動操作公共程序的程序并將它們作為共享軟件來分發(fā),...
ActiveX DLL 可以用來保護(hù)代碼的一些部分,因?yàn)樽鳛殚_發(fā)人員我們知道,用ASP進(jìn)行工作時,源代碼控制是一個艱難而瑣碎的過程。ActiveX DLL 是經(jīng)過編譯的代碼,沒有工程文件中的源代碼就不能對其進(jìn)行修改。這就給開發(fā)人員帶來許多可能:開發(fā)自動操作公共程序的程序并將它們作為共享軟件來分發(fā),分發(fā)至少有一些源代碼保護(hù)的ASP應(yīng)用程序,不斷開發(fā)自己的ASP程序指令,以在一個全方位多功能的結(jié)果中提高ASP的性能。
你所安裝的第一個ActiveX DLL 文件將注冊并安裝Visual Basic 6 的運(yùn)行時間文件,它允許運(yùn)行經(jīng)過編譯的代碼。但是要注意,這還要求重新啟動服務(wù)器。當(dāng)一個現(xiàn)存的DLL被安裝并使用之后,如果想要對其進(jìn)行升級, 服務(wù)器就將給出一個錯誤信息提示,說此文件正被另一個過程所使用。要糾正這一問題,也要重新啟動服務(wù)器后才能完成DLL的升級。請記住在開發(fā)中要使用一個測試環(huán)境。
雖然這個例子非常簡單,用一個ASP包含文件就可以輕易地實(shí)現(xiàn),但當(dāng)開發(fā) ActiveX DLL 時,你可以使用 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ù)的完整性,輕易地在整個數(shù)據(jù)庫中進(jìn)行層疊式更新,這些都是很普通的操作。舉例來說,現(xiàn)在有一個拼寫錯誤的文本描述,可以在查循表中進(jìn)行修改,所有選擇了這個描述的相關(guān)條目都會自動地修改,因?yàn)槲覀円呀?jīng)存儲了與這個描述相關(guān)的數(shù)字。組合框以查詢表的內(nèi)容為基礎(chǔ),這些內(nèi)容將查詢關(guān)鍵字的值與其描述聯(lián)系起來,如果系統(tǒng)使用了許多查詢的話,產(chǎn)生這些組合框的代碼會變得非常重復(fù)。本文用 ActiveX DLL 來簡化創(chuàng)建HTML組合框的程序,用一個數(shù)據(jù)庫查詢表中的內(nèi)容進(jìn)行填充。例子中的表名為lookup_table,它有以下域:
Lookup_Key: 存儲在數(shù)據(jù)庫中的值
Lookup_Field: 對查詢元素進(jìn)行分類
Lookup_Description: 顯示在組合框中的描述
要創(chuàng)建ActiveX DLL,步驟如下:
開始一個新的visual basic 工程文件;
選擇ActiveX DLL 作為工程文件類型;
在Properties 窗口,命名類模塊和工程文件。將工程文件命名為keiths_lookup ,將模塊命名為lookup 。 ASP引用DLL函數(shù)時要使用這些名字。以后在ASP碼中,將要引用一個名為keiths_lookup.lookup的服務(wù)器對象。
用同樣的名字保存工程文件和模塊,其中工程文件的擴(kuò)展名為.vbp ,類模塊的擴(kuò)展名為.cls 。在本例中 工程文件的名字為keiths_lookup,模塊的名字為lookup。
在工程菜單中,選擇References 。這是你可以使用的其它應(yīng)用程序?qū)ο。在本例中,檢查Microsoft ActiveX data objects 2.0 庫和Microsoft ActiveX Data Objects Recordset 2.0 庫。
在包含查詢表的IIS服務(wù)器數(shù)據(jù)庫中創(chuàng)建一個名為Sumnet 的數(shù)據(jù)集。這個數(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 ;
選擇一個放置安裝文件的文件夾;
選擇單個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)生三個組合框,一個用州來填充,一個用位置填充,另外一個用年齡組。第一個參數(shù)將成為網(wǎng)頁上的對象名,第二個參數(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 >
這個例子非常簡單。通過使用更多的參數(shù),如表名、域名等,可以創(chuàng)建許多便攜式的函數(shù),這些函數(shù)可以用在你的工作中所遇到的各種各樣的應(yīng)用程序中。
因?yàn)檫@些代碼是在服務(wù)器一端水平上運(yùn)行的,所以客戶機(jī)不需要安裝任何東西。這僅僅是用ActiveX DLL所能實(shí)現(xiàn)的功能的小小的例子。只需要一點(diǎn)點(diǎn)努力,就可以得到一個在網(wǎng)絡(luò)用戶中不同凡響的多功能應(yīng)用程序。
(出處:熱點(diǎn)網(wǎng)絡(luò))