本篇文章通過與傳統的設計方法相比較,介紹了如何在asp**中呼叫vb元件的方法。在本篇文章中,我們假設讀者具有vb和asp的相關入門知識。
伺服器端元件和客戶端元件的比較
伺服器端元件和客戶端元件有許多不同之處。伺服器端元件是在計算機伺服器上註冊的dll檔案,客戶端元件則在瀏覽器執行的計算機上註冊,在ie中,這些客戶端元件被稱作activex瀏覽器外掛程式元件。
activex客戶端元件可以使用vb編寫,並通過
網際網路或內聯網傳送給瀏覽器,生成很精彩的效果。問題是,activex客戶端元件只限於ie,而使用vb編寫的伺服器端元件則能夠產生純html**,適用於所有的瀏覽器。伺服器端元件的最大問題是該元件必須在
windows
+iis環境中或與iis的api相容的應用中執行。相比較而言,在伺服器端實現這種相容性似乎更容易一些。
iis伺服器端元件駐留在與iis相同的記憶體空間中,並隨時準備伺服器上處理的asp網頁的呼叫。從理論上說,我們可以在返回瀏覽器的asp**中插入任何文字或**,但一般來說,大多數伺服器端元件被用來處理需要大量時間的計算或資料庫資訊查詢,然後將所得到的結果以html**的形勢返回給瀏覽器。
vb元件的解析
由於本篇文章旨在討論編寫vb元件的基本方法,因此在能夠說明問題的情況下,其中的例子將是十分簡單的。在詳細討論編寫vb元件之前,我們將首先從概念上對vb元件作一番剖析。
在使用vb編寫伺服器端的元件時,有三個分層次的概念(在vb和asp**中都會用到)需要注意:
·project名字
·class名字
·method名字
vb工程的名字就是project名字。許多開發人員都將project名字看作是元件名字,但vb只將它看作是工程的名字。在我們的例子中,project名字是exampleproject,當然了,我們可以隨意命名自己的工程名字;class名字名字是exampleclass,method名字是examplemethod。
工程名字(元件名字)也可以是由元件**編譯後得到的dll檔案的名字,該dll檔案將包含有被iis用來向瀏覽器返回文字或html**的經過編譯的vb**。
方法名字指的是管理特定**功能的vb**部分,例如計算日期或顯示資料庫中所有作者的清單。元件方法有點角個黑盒子,它完成特定的工作或根據輸入的資訊返回特定的資訊。一般情況下,在乙個元件中可以有多個方法。為了更有效地管理元件的方法,可以將方法按照相似的分類組合在一起,這就是元件類的作用。
元件類能夠在記憶體中生成元件類**的乙個拷貝,在使用asp**建立物件時,它也被稱作物件,這就是例項化。一旦有了元件類**例項的物件引用,我們就可以從asp**中呼叫類中包含的方法。
在我們的例子中,工程、類、方法的名字將用來在asp**中例項化vb元件,並以方法引數的形式從asp**中向vb**傳送值,在asp**中接收從vb方法中返回的值。
從asp檔案中呼叫vb元件
我們用來呼叫vb元件的asp檔案將使用物件變數儲存vb物件的引用。在asp檔案中,可以使用asp server物件的createobject()方法建立乙個物件,該方法將返回乙個它建立的物件的引用。在例子中,我們將使用objreference作為元件的物件變數。下面的**顯示asp**在例項化vb元件時需要使用元件的工程名和類名(exampleproject和exampleclass)。
例項化vb元件的asp**:
set objreference = server.createobject("exampleproject.exampleclass")
vb元件將從asp**中接受3個變數的值,並向asp**返回乙個值,該值將
儲存在名字為strmethodreturn的asp變數中。下面的**顯示出asp**是如何得到由vb元件返回的值的,它向vb方法傳送三個名字分別為param1、param2和parma3的三個引數值:
strmethodreturn = objreference.examplemethod(param1, param2, param3)
param1、param2、param3這三個引數必須與vb元件中方法的定義完全相同,下面是二行例項化vb元件的類、並呼叫類的方法獲得返回值的asp**的例子:
set objreference = server.createobject("exampleproject.exampleclass")
strmethodreturn = objreference.examplemethod(param1, param2, param3)
下面的圖表直觀地顯示了vb元件的工程、類和方法名字是如何與asp檔案中的元件例項化**協調的。在逐步地學習如何編寫例子中的vb**和asp檔案時,可以將下面的圖表作為參考。
vb方法的作用
我們例子中簡單的vb元件將獲得使用者的名字和年齡,然後返回乙個以天計的使用者的年齡,而且有乙個可選項,能夠提醒某個使用者是否已經超過了45歲。
如果我們向元件傳送乙個虛構的eric clapton作為方法的第乙個引數值,將第二個引數設定為56,我們將得到下面的返回字串:
eric clapton is over 20440 days old.
如果我們將可選的第三個引數設定為true(這一引數將使方法判斷使用者是否已經超過45歲),我們將會得到下面的返回字串:
eric clapton is over 20440 days old.
由於使用了三個完全不同的變數━━使用者的姓名、年齡以及表示他們是否超過了45歲,因此我們需要使用三個方法引數將這些資訊從asp檔案傳送給vb**。在vb中,考慮要使用哪些資料型別是十分重要的。我們將使用乙個名字為strname的字串型變數表示使用者的姓名,名字為intage的整型變數表示使用者的年齡,名字為blnageemphasison的布林型變數表明使用者是否已經超過了45歲。
三個方法引數(傳送給vb元件的方法**的變數):
在vb中建立伺服器端元件
啟動vb後,在「新工程」視窗中雙擊「activex dll」圖示。一旦vb載入了新的activex dll工程,至少會看到二個開啟的視窗:工程視窗和屬性視窗。如果有乙個視窗顯示不出來,可以從vb的選單中選擇「檢視」選單項(分別使用「檢視」->「工程管理器」、「檢視」->「屬性視窗」)。
由於vb對第乙個工程和類的預設命名分別是project1、class1,我們可以將它們分別改為exampleproject 和exampleclass。工程名字的修改可以在工程視窗中進行。在工程視窗中新輸入的工程名字左側有乙個帶有+或-的小方框。如果顯示的是+號,選擇該小方框,+號就會變成-號,預設的類名(class1)就會顯示在工程名字的下面。在工程視窗中選擇預設的類名,在屬性視窗中將預設的類名修改為exampleclass。
在儲存工程時,vb會將包含類的**儲存在乙個擴充套件名為cls的檔案,工程檔案的擴充套件名為vbp,其中
儲存有工程的各種設定、檔名和檔案儲存的位置。
伺服器端元件的屬性值
在屬性視窗中顯示exampleclass類的屬性,注意instancing屬性的值為「5 multiuse」,如果將工程的型別設定為標準的exe工程,該屬性的值就會隨之發生改變。
在vb的選單中選擇「工程」->「exampleproject屬性」,就會顯示出工程屬性視窗。在「常規」標籤的右下端的「執行緒模式」屬性的值應當被設定為「單元執行緒」,這將使多個訪問者能夠同時使用我們的元件類的不同的例項。另外,選擇「無人值守執行」和「駐留記憶體」二個選項,避免vb6中的記憶體洩露問題。
vb方法的**
現在我們就需要使用vb的**視窗來輸入vb**了。如果**視窗還是一片空白,那就輸入下面的**好了:
option explicit
'它將要求我們必須定義所有的變數。
public function examplemethod(byval strname as string, _
byval intage as integer, _
optional byval blnageemphasison as boolean = false) as string
在上面的**中,我們將方法定義成了乙個public函式,這意味著該元件之外的任何**都能夠呼叫它,由於是乙個函式,它還會向呼叫它的**返回乙個值。
public function examplemethod() as string
上面的**表示examplemethod()函式將向它的呼叫者返回乙個字串型別的值。
我們的vb方法帶有3個從asp**接受值的引數變數,最後乙個引數變數是可選的。所有用來從vb元件之外置收值的引數變數都需要在vb方法的括號間定義和使用,我們可以象在方法內定義的變數那樣使用以這種方式定義為方法引數的變數,二者之間唯一的區別是外面的asp**來決定它們的值。
下面是三個變數和它們的資料型別:
byval strname as string
byval intage as integer
optional byval blnageemphasison as boolean = false
上面的**定義了三個方法引數的資料型別,指明它們是按值傳送的,而且第三個引數是可選的,如果沒有第三個引數,則其預設值為false。
然後,我們將在方法的定義中新增一些必要的逗號、空格和底劃線(_),這樣才能符合vb的語法要求。我們將把引數列表放在方法定義的括號中間,得到的方法定義如下:
public function examplemethod(byval strname as string, _
byval intage as integer, _
optional byval blnageemphasison as boolean = false) as string
在vb的**視窗輸入上面的方法定義,就會生成乙個end function語句。方法的定義和end function之間就是我們編寫自己的**的地方了。
vnc伺服器端如何配置,vnc伺服器端如何配置教程
作為iis7伺服器管理工具,它支援linux vnc,win vnc,可以實現批量管理,遠端監控,批量開啟鏈結,操作一台等於同時操作n臺 使用起來十分便捷。對於iis7伺服器管理工具來說,它能實現批量管理 同步操作 到期提醒 資料安全和定期執行 等功能。適用於機房管理 站長 運維工作 程式設計師,等...
伺服器端使用Screen
如果你在linux伺服器端工作,沒有聽說過screen或tmux那簡直弱爆了。有時間自己可以多了解一些。簡單介紹下screen screen是乙個可以在多個程序之間多路復用乙個物理終端的視窗管理器。screen中有會話的概念,使用者可以在乙個screen會話中建立多個screen視窗,在每乙個scr...
git伺服器端建立專案
cd myproject 你建立的專案資料夾 git init 執行git的本地初始化 git add 將所有的檔案新增到版本控制系統 git commit m initial commit 在本地提交到版本庫 git remote add origin git 116.255.160.144 sr...