如何用VB6寫COM組件(轉)
2024-07-21 02:15:40
供稿:網友
 
   所幸的是,我們可以用com組件來在最大程度上擴展asp的功能。你可知道,任何可以用諸如vb,vc和vj以及其它的一些程序語言所寫出來的東西,都可以被應用到你的網站的開發中去,這就是com(組件對象模型)。com能夠用來編寫能夠被asp所調用的對象。當在vb等編程環境中完成了組件的編制后,就可以放在asp頁面中被asp所調用了。在這篇文章中,我們將看到如何使用vb6來編寫一個com對象,如何將其注冊在服務器上,并在asp頁面中對其進行調用。但在開始之前,讓我先來簡單的介紹一寫關于com的小知識。 
   com對象通常表現為一個.dll文件,是一個編譯好了的可執行程序。這意味著com的運行速度要比純asp代碼要快的多。在調用com對象之前,必須在運行iis服務器的機器上對其進行注冊,而且不能通過asp代碼來注冊com組件,這也就是說你必須有對服務器的使用權限。 
   現在來看一看我們要實現的任務:我們需要創建一個組件,當你對它傳遞一個年份的時候,它能夠告訴你這一年是否為閏年。當然,這個任務可以用vbscript來實現的。這兒是用這個簡單的例子,只是為了程序的簡便起見,從而能夠把更多的注意力放在如何創建組件以及如何同asp進行交互上面。實際上如同上面所說的那樣,你可以使用vb的任何功能來創建這個組件。
   首先要做的當然是編寫activex dll組建,至于到底如何在asp中調用它,我們會在后面提及。打開visual basic,一個對話框會提示你選擇一種新建工程類型,在這兒當然選擇“activex dll”。 
   如果工程瀏覽器沒有被打開,可以通過選擇菜單欄上面的“視圖|工程瀏覽器”來打開它。如果屬性窗口也沒有打開,同樣的方法,可以打開屬性窗口。 
   現在在工程瀏覽器中點擊project1,然后可以在屬性窗口中看到工程的name 屬性為project1,把它改為checkyear。當然如果你很懶的話,你也可保留這些缺省的設置,只需在后邊在asp中調用它的時候,也使用相應的工程名和類名就好了。 
   現在在工程中,已經預建了一個缺省的類,你可以按你自己的喜好來重新對其命名。在這兒把類命名為leapyear。 
   在類中填寫入如下的代碼:
   option explicit
   '用來判斷一個年份是否為閏年的函數
   public function isleapyear(yr as variant) as boolean
   '如果年份能夠被4整除并且不能被100整除,或者能夠被400整除
   '那么它就是閏年
   if (yr mod 4 = 0 and yr mod 100 < > 0) or yr mod 400 = 0 then
   isleapyear = true
   else
   isleapyear = false
   end if
   end function
   上面就是所需要的全部代碼了,其實很簡單。下面所要做的,就是把它編譯成一個dll文件。在“文件”菜單中選擇“建立checkyear.dll...”,再選擇要文件要保存的路徑。一般的,可以在在服務器上的inetpub目錄下面建一個server components目錄,專門用來存放所有用于asp中的組件。但這不是必須的,無論你把dll文件保存在什么地方,在編譯的過程中,編譯程序都會自動的在系統中對組件進行注冊。
如果你的vb和web服務器不是在一臺電腦上,那么在把dll文件拷貝到服務器上后,如果要讓組件能夠被使用,就必須手工對其進行注冊。
   首先你需要把.dll文件從你開發它的機器上,發送到你的服務器上。一般在www服務器上可以為所有的為asp寫的組件建立一個目錄,把那個.dll文件拷貝到那個目錄中。比如在inetpub下建立一個server components目錄。在完成拷貝后,就可以運行regsvr32.exe來注冊這個組件了。在“開始”菜單中選這“運行”,然后在“運行”對話框中輸入regsvr32 和要注冊的組件的名稱和其完整路徑。例如: 
   regsvr32 "c:inetpubserver componentsmycomponent.dll"
   就這么簡單,在注冊成功之后,你會得到一個成功注冊的信息。然后,你就可以在asp頁面中引用這個com對象了。當然,要完成這些你需要有服務器的訪問權限,你可以直接在服務器上注冊或者通過諸如pcanywhere之類的軟件實現遠程注冊。
   然后,我們就可以在asp中調用這個組件了。建立一個asp頁面,并添入下面的代碼: 
   < % option explicit
   dim ocheckyear
   dim isleapyear 
   dim year
   year = 1900 '用來檢測組件的年份
   '建立一個對剛才那個組件的引用
   set ocheckyear = createobject("checkyear.leapyear")
  '調用組件中的isleapyear函數,并報存結果
   isleapyear = ocheckyear.isleapyear(year)
   '清除對組件的引用,好的編程習慣
   set ocheckyear = nothing
   % >
   < html >
   < head >
   < title >例子< /title >
   < /head >
   < body >
   < %
   '打印輸出 
   if isleapyear = true then
   response.write "< p >< b >" & year & "< /b >是閏年< /p >"
   else
   response.write "< p >< b >" & year & "< /b >不是是閏年< /p >"
   end if
   % >
   < /body >
   < /html >
   代碼很簡單,唯一需要解釋的,就是在asp中如何建立對自建對象的引用。它的語法是:createobject("projectname.classname")。你應該還記得吧,在前面我們把工程命名為checkyear而把類命名為leapyear,因而在這兒的語句就是:createobject("checkyear.leapyear")。一旦你建立了對對象的引用,你就可以在asp頁面中訪問其所有的公有元素了。剩下的,就如同調用其它任何asp內置對象一樣簡單了。