top
Loading...
用VB編寫ActiveXDLL實現ASP編程
    ASP是目前一種廣為應用的用來快速構建動態WEB站點的編程語言,默認的內置開發語言是VBScript,由于ASP和微軟Windows系列操作系統的結合非常的好,使得ASP已經成為了NT開發平臺上面進行WEB開發的首選語言和環境。他有著簡單易學,方便快速開發的種種優點,但是他也有著致命的弱點,就是他是腳本語言解釋執行的,速度會受到一定的影響,更為關鍵的是,使用ASP來開發完成一個項目之后,整個項目在交付客戶使用的時候,是會連帶所有的ASP腳本源代碼的,也就無法將商業程序保密了,源代碼泄漏會給自己造成很大的損失,雖然微軟也相應的推出了用來加密ASP程序的軟件,但是有著諸多的限制,以及會降低程序運行的速度和二次開發調試的難度,難道ASP做出來的項目就真的要暴露所有的源代碼嗎?

當然了,答案當然是否定的,因為世界上沒有絕對不可能的事情,接下來就跟隨我來看看如何利用VB的ActiveX DLL來實現將ASP程序封裝起來吧,也就是我們可以使用ActiveX DLL來完成所有ASP能完成的事情,而ActiveX DLL是編譯好的DLL文件,別人是無法得知你的源代碼的,也就保證的自己的商業機密和核心技術,并且達到同樣的效果,使用完全封裝的ActiveX DLL會比完全適用ASP腳本語言的執行速度要快很多,尤其是大運算量的時候跟為明顯!經過我們的具體測試,在操縱10000條數據庫記錄的時候,封裝成為ActiveX DLL的WEB應用程序比純ASP代碼的應用程序,速度上面要快大約21%左右,在目前國內過于緩慢的網絡來講,速度就是一個WEB站點的很關鍵的一部分。并且采用了ActiveX DLL來開發WEB程序,要比單純使用ASP好得多,畢竟ASP只能使用VBScript來開發,無法享用VB大量的優點,而ActiveX DLL則可以充分利用VB里面所有的特性。

下面我們先來看看什么是ActiveX DLL吧。ActiveX是微軟提出的廣泛應用于Windows系列的一種代碼封裝技術,提高了程序代碼的可重用性,加快了程序項目的開發速度,一般被稱為“組件”。在VB6的集成開發環境當中,我們可以看到一下幾種ActiveX項目:

1、ActiveX EXE

這是在“過程外”運行的ActiveX/COM服務器組件,也就是說他們運行的過程和初始化組件的客戶機代碼不同。盡管可以用ASP訪問ActiveX EXE,但是不推薦改動IIS元庫,該庫允許所有的可執行文件由服務器上運行的腳本代碼啟動。

2、ActiveX OCXs

這些特殊的組件把主機應用程序顯示和操作組件所需的附加支持包含在GUI環境中。還可以把OCX組件放在網頁當中。但是,OCX是應用程序界面,不可以使用ASP來創建的。

3、ActiveX文檔DLL和ActiveX文檔EXE

Active文檔可以在OLE文件箱應用程序中,例如IE或者Office Binder,顯示VB表單。但他們在ASP不能應用。

4、ActiveX DLLs

這些ActiveX/COM組件和初始化組件的客戶機在同一個進程中運行。而我們要討論的ActiveX DLL正是整個組件。一般微軟的附加組件和其他的一些第三方廠家提供的各種組件都是這種類型的ActiveX DLL,但是并不全是使用VB編寫的,同樣可以使用VC/JAVA等等語言來開發。

探討完了什么是ActiveX DLL,我們開始正式編寫我們自己的ActiveX DLL,以便來實現ASP中的同樣功能,眾所周知,ASP內置了Response、Request、Server、Session、Application五個對象,其實這五個內置對象正是IIS控制臺初始化的五個ActiveX DLL組件,既然IIS可以初始化這五個組件用于ASP中,我們當然也可以直接在我們的ActiveX DLL中引用這些組件來實現我們的編程,也就是說我們可以在VB應用程序中通過引用這些組件來實現訪問ASP內置對象的功能。

只要你安裝了PWS4或者IIS4以上的WEB服務器,你就擁有了一個名稱叫做“Microsoft Active Server Pages Object”的對象庫,我們可以在VB的ActiveX DLL應用中引用這個對象庫,通過引用這個對象庫,我們就獲得了一個對象(類):ScriptingContext,這個對象也正是我們整個文章探討的核心對象。對象庫內的關系如下:

對象庫類類成員

ASPTypeLibrary ScriptingContext Application

Request

Response

Session

Server

通過上面的關系圖,我們就可以很容易理解類ScriptingContent。下面我們來看一個具體的例子吧:

1、 使用VB6創建一個新的ActiveX DLL項目

2、 引用“Microsoft Active Server Pages Object”對象庫。

3、 創建兩個組件事件:OnStartPage以及OnEndPage

4、 在事件OnStartPage中創建類ScriptingContent的一個引用。

5、 實例化類ScriptingContent。

Test.cls (類實現)

''對象的聲明

Dim rp as Response

Dim rq as Request

Dim ap as Application

Dim sr as Server

Dim sn as Session

''當組件被創建的時候會觸發這個事件

Public Sub OnStartPage(mysc as ScriptingContent)

''進行對象的實例化

set rp=mysc.Response

set rq=mysc.Request

set sr=mysc.Server

set ap=mysc.Application

set sn=mysc.Session

rp.write "<br>ActiveX DLL組件已經被創建了!<br>"

End Sub

''當組件被銷毀的時候觸發這個事件

Public Sub OnEndPage()

Rp.write "<br>ActiveX DLL組件已經被銷毀!<br>"

''銷毀對象

Set rp=nothing

Set rq=nothing

Set sr=nothing

Set ap=nothing

Set sn=nothing

End Sub

''定義我們自己的一個組件方法

Public Sub HelloWorld()

Rp.write "<H1>Hello,World!</H1>"

End Sub

這樣,我們就創建可以訪問ASP內置對象的ActiveX DLL了。我們命名這個組件項目為first,在VB中間編譯這項目成為一個DLL文件first.dll,并且我們在系統中注冊這個DLL文件。接下來,我們需要一個簡單的幾乎沒有什么代碼的ASP程序來調用這個組件:

test.asp

<html>

<head>

<title>測試ActiveX DLL</title>

</head>

<body>

<%

Dim testme

''創建我們剛才編譯成功的組件,一旦創建這個組件,同時會在葉面輸出文字“ActiveX DLL組件已經被

''創建了!”

set testme=server.createobject("first.test")

''調用組件的方法

testme.HelloWorld

''注銷組件,在注銷的同時,會自動在葉面顯示“ActiveX DLL組件已經被銷毀!”

set testme=nothing

%>

</body>

</html>

通過上面簡單的例子,我們可以看到使用ActiveX DLL同樣可以實現和ASP同樣的功能,并且帶來的代碼保密和程序運行更加高效的優點。ActiveX DLL和純ASP有著各自的優點和缺點,只要我們合理的運用這兩種技術,比如適當的將商業邏輯封裝在ActiveX DLL中,或者在需要保密的地方使用DLL封裝技術,一定可以編寫出高效快速的WEB應用程序。
北斗有巢氏 有巢氏北斗