在本節(jié)中,我們來實踐一下。首先創(chuàng)建一個COM對象,然后使用它,最后再想法改進。
首先進行下面兩步:
運行Visual Basic;選擇 "Standard EXE"工程類型;由于COM對象是基于類的,而類實際上是程序包,就像模塊中的代碼一樣。所以:
選擇"Project"->"Add Class Module";當相應的對話框出現(xiàn)后,選擇"'Class Module",然后單擊"Open"按鈕。
這樣,在桌面上顯示一個表單,以及包含在工程Project1中的Class1。
下面再將空的類的類名更改:
在類的屬性窗口中,將類的Name屬性改成CDog。
需要說明的是,為了區(qū)別起見,每個對象名的前面都有相應的前綴,例如Text Box對象前是"txt"、Form前是"frm"、類前可以大寫字母"C"或小寫字母"cls",但這里使用前者。
下面我們添加一些代碼來測試一下:
在CDog類通用聲明部分中,添加變量的聲明:
Public Name As String
然后,打開Form1;
在表單中添加一個命令按鈕;
打開代碼窗口,為該命令按鈕添加下列代碼:
Dim MyDog As CDog
Set MyDog = New CDog
MyDog.Name = "Billy Moore"
MsgBox MyDog.Name
Set MyDog = Nothing
下面就來解釋上述代碼的含義:
Dim MyDog As CDog
該行語句是用來通知Visual Basic為CDog對象設置一個位空間,但這時還不能使用該對象,必須等到下條語句為止:
Set MyDog = New CDog
它是用來創(chuàng)建CDog的實例。這就意味著前面空的MyDog模板變成了現(xiàn)在可以使用的CDog對象。
MyDog.Name = "Billy Moore"
MsgBox MyDog.Name
上述代碼的第一行是用來設置MyDog的Name變量,同時第二行語句是用來將該變量的內(nèi)容顯示在消息對話框中。最后:
Set MyDog = Nothing
用來將MyDog對象簡單的置空。
按F5鍵運行并測試。
怎么樣?但同時,我們可能不禁要問,標準模塊和類模塊究竟有什么不同?我們再來看看下面的示例:
將命令按鈕的代碼變成:
Dim MyDog As CDog
Set MyDog = New CDog
Dim MyDog2 As CDog
Set MyDog2 = New CDog
MyDog.Name = "Billy Moore"
MsgBox MyDog.Name
MyDog2.Name = "Sadie Moore"
MsgBox MyDog2.Name
Set MyDog = Nothing
Set MyDog2 = Nothing
與最前面的代碼不同的是,這里的代碼實際上是定義兩個對象MyDog和MyDog2,這兩個對象是基于CDog的相互獨立的兩個對象。
按F5鍵運行并測試。
結果怎樣?這一次是不是有兩個對話框出現(xiàn)?一個顯示"Billy Moore",另一個顯示"Sadie Moore"。
上述定義的每個對象中除了Name外,沒有任何實際的屬性,因此下面過程就來添加:
打開前面的Class1;
聲明下面的公共變量:
Public Age As Integer
打開前面的Form1;
將命令按鈕的代碼變成:
Dim MyDog As CDog
Set MyDog = New CDog
Dim MyDog2 As CDog
Set MyDog2 = New CDog
MyDog.Name = "Billy Moore"
MyDog.Age = 4
MsgBox MyDog.Name & " is " & MyDog.Age & " years old"
MyDog2.Name = "Sadie Moore"
MyDog2.Age = 7
MsgBox MyDog2.Name & " is " & MyDog2.Age & " years old"
Set MyDog = Nothing
Set MyDog2 = Nothing
這些代碼和前面差不多,只不過這里使用了Age變量。
按F5鍵運行并測試。
應該出現(xiàn)顯示name和age內(nèi)容的兩個消息對話框。
現(xiàn)在再試著將其中一個對象的age值設置成1,000或者30,000??纯唇Y果如何?程序照樣正常運行,這是因為定義的整型變量值可達32,767,但是實際中的狗(Dog)是不會有30,000歲的。
那么,這種情況應該怎樣處理呢?
首先進行下面兩步:
運行Visual Basic;選擇 "Standard EXE"工程類型;由于COM對象是基于類的,而類實際上是程序包,就像模塊中的代碼一樣。所以:
選擇"Project"->"Add Class Module";當相應的對話框出現(xiàn)后,選擇"'Class Module",然后單擊"Open"按鈕。
這樣,在桌面上顯示一個表單,以及包含在工程Project1中的Class1。
下面再將空的類的類名更改:
在類的屬性窗口中,將類的Name屬性改成CDog。
需要說明的是,為了區(qū)別起見,每個對象名的前面都有相應的前綴,例如Text Box對象前是"txt"、Form前是"frm"、類前可以大寫字母"C"或小寫字母"cls",但這里使用前者。
下面我們添加一些代碼來測試一下:
在CDog類通用聲明部分中,添加變量的聲明:
Public Name As String
然后,打開Form1;
在表單中添加一個命令按鈕;
打開代碼窗口,為該命令按鈕添加下列代碼:
Dim MyDog As CDog
Set MyDog = New CDog
MyDog.Name = "Billy Moore"
MsgBox MyDog.Name
Set MyDog = Nothing
下面就來解釋上述代碼的含義:
Dim MyDog As CDog
該行語句是用來通知Visual Basic為CDog對象設置一個位空間,但這時還不能使用該對象,必須等到下條語句為止:
Set MyDog = New CDog
它是用來創(chuàng)建CDog的實例。這就意味著前面空的MyDog模板變成了現(xiàn)在可以使用的CDog對象。
MyDog.Name = "Billy Moore"
MsgBox MyDog.Name
上述代碼的第一行是用來設置MyDog的Name變量,同時第二行語句是用來將該變量的內(nèi)容顯示在消息對話框中。最后:
Set MyDog = Nothing
用來將MyDog對象簡單的置空。
按F5鍵運行并測試。
怎么樣?但同時,我們可能不禁要問,標準模塊和類模塊究竟有什么不同?我們再來看看下面的示例:
將命令按鈕的代碼變成:
Dim MyDog As CDog
Set MyDog = New CDog
Dim MyDog2 As CDog
Set MyDog2 = New CDog
MyDog.Name = "Billy Moore"
MsgBox MyDog.Name
MyDog2.Name = "Sadie Moore"
MsgBox MyDog2.Name
Set MyDog = Nothing
Set MyDog2 = Nothing
與最前面的代碼不同的是,這里的代碼實際上是定義兩個對象MyDog和MyDog2,這兩個對象是基于CDog的相互獨立的兩個對象。
按F5鍵運行并測試。
結果怎樣?這一次是不是有兩個對話框出現(xiàn)?一個顯示"Billy Moore",另一個顯示"Sadie Moore"。
上述定義的每個對象中除了Name外,沒有任何實際的屬性,因此下面過程就來添加:
打開前面的Class1;
聲明下面的公共變量:
Public Age As Integer
打開前面的Form1;
將命令按鈕的代碼變成:
Dim MyDog As CDog
Set MyDog = New CDog
Dim MyDog2 As CDog
Set MyDog2 = New CDog
MyDog.Name = "Billy Moore"
MyDog.Age = 4
MsgBox MyDog.Name & " is " & MyDog.Age & " years old"
MyDog2.Name = "Sadie Moore"
MyDog2.Age = 7
MsgBox MyDog2.Name & " is " & MyDog2.Age & " years old"
Set MyDog = Nothing
Set MyDog2 = Nothing
這些代碼和前面差不多,只不過這里使用了Age變量。
按F5鍵運行并測試。
應該出現(xiàn)顯示name和age內(nèi)容的兩個消息對話框。
現(xiàn)在再試著將其中一個對象的age值設置成1,000或者30,000??纯唇Y果如何?程序照樣正常運行,這是因為定義的整型變量值可達32,767,但是實際中的狗(Dog)是不會有30,000歲的。
那么,這種情況應該怎樣處理呢?

