一 組件編寫速成——編寫組件最基本的步驟 本部分主要講解編寫組件的基本步驟
如果你有進一步學習的欲望
請參照VB
幫助文檔中
創建 ActiveX DLL
部分(MSDN Library中文檔文件名為Vbcon
chm)
目的
編寫一個最簡單的加法器組件
這個組件有兩個屬性
一個方法
我們從最熟悉的地方開始
那就是先假設這個組件已經存在
看看在ASP使用該組件的代碼
<%
Dim objSum
先創建該組件
組件標識為 TestDll
Sum
Set objSum = Server
CreateObject(
TestDll
Sum
)
記住TestDll
Sum 中的
TestDll
Sum
objSum
augend =
augend 屬性為被加數
objSum
addend =
addend 屬性為加數
Result = objSum
Plus
Plus 方法求和
Response
Write Result
Set objSum = Nothing
%>
請務必記住這幾個關鍵詞
TestDll
Sum
augend
addend
Plus
這將與接下來的工作緊密關聯
下面是詳細步驟
運行VB
在
文件
菜單中
單擊
新建工程
→在
新建工程
對話框中
雙擊
ActiveX DLL
圖標→Visual Basic 將向該新工程中自動添加一個類模塊 Class
(在
工程資源管理器
中可以看到
如圖
)
.按 F
鍵打開
屬性
窗口
雙擊
名稱
屬性把
Class
改成 Sum
.在
工程
菜單中
單擊
工程
屬性
打開
工程屬性
對話框
在
工程名稱
中填寫TestDll
在
工程描述
中填寫
創建ActiveX DLL示例
如圖
提示
ASP創建組件中的標識TestDLL
Sum這兩項的意思明白了吧
.在
文件
菜單中
單擊
保存工程
分別使用下面的名稱保存工程文件
SetupDll
cls和SetupDll
vbp
.為 Sum 類創建屬性
(
) 在
工具
菜單中
選擇
添加過程
打開
添加過程
對話框
在
名稱
框中
輸入augend
單擊
屬性
然後單擊
確定
如圖
(注意
當前焦點應在代碼窗口
否則
添加過程
菜單無效)
(
) 在
工具
菜單中
選擇
添加過程
打開
添加過程
對話框
在
名稱
框中
輸入addend
單擊
屬性
然後單擊
確定
.為 Sum 類創建方法
在
工具
菜單中
單擊
添加過程
打開
添加過程
對話框
在
名稱
框中
輸入Plus
在類型中
你可以選擇
子程序
或
函數
本例中由於要返回加數與被加數之和
故單擊
函數
然後單擊
確定
現在
前面ASP代碼中的五個關鍵詞語都已用上
這下很多東西都明白了吧
.類模塊Sum代碼窗口中所有代碼如下
Option Explicit
Private mdbl_augend As Double
Private mdbl_addend As Double
Public Property Get augend() As Double
augend = mdbl_augend
End Property
Public Property Let augend(ByVal vNewValue As Double)
mdbl_augend = vNewValue
End Property
Public Property Get addend() As Double
addend = mdbl_addend
End Property
Public Property Let addend(ByVal vNewValue As Double)
mdbl_addend = vNewValue
End Property
Public Function Plus()
Plus = augend + addend
End Function
你已經注意到以上代碼與系統生成的代碼有點不同
主要是Public Property Get augend() As Variant部分用實際的數據類型Double替代了
注意
實際上
當執行 x = objSum
augend 語句時
調用的是 Property Get 過程
獲取mdbl_augend的值
而執行 objSum
augend =
語句時
將調用 Property Let 過程
將
賦給 mdbl_augend
.最後一步
在
文件
菜單中
單擊
生成
Dll(K)…
生成文件SetupDll
dll
到這裡
組件已創建好了
現在
我們可以先在VB
中編寫一個測試工程
測試一下該文件正確與否
.在
文件
菜單中
單擊
新建工程
→雙擊
標准EXE
.在
工程
菜單中
單擊
引用
→在
引用
對話框中按
浏覽
按鈕
選擇剛剛編譯過的
SetupDll
dll
文件→單擊
確定
.最後在代碼窗口中編寫如下代碼
Option Explicit
Private Sub Form_Load()
Dim objSum As TestDll
Sum
Set objSum = New Sum
objSum
augend =
objSum
addend =
MsgBox objSum
Plus
End Sub
運行一下
結果正確
接下來我們在ASP中使用這個組件
將SetupDll
dll拷到Web服務器中
並用
Regsvr
exe setupdll
dll
命令注冊該組件
然後在浏覽器中執行本部分開頭的ASP程序
如果不行的話
你可以嘗試先用VB
的打包工具打包
然後再安裝
組件會自動注冊
而且一些必需的VB
運行文件也會自動安裝
說明
本部分所有程序均在下載包的Setupdll
zip中
上面的例子中我們使用屬性過程Property Get和Property Let來添加屬性(Property Get讀取屬性的值
而Property Let給屬性賦值)
若需要對設置的值進行校驗
可在Property Let過程編寫適當代碼
如下面代碼
Public Property Let augend(ByVal vNewValue As Double)
If vNewValue <
Then
MsgBox
搞什麼!小於
的值
自己心算就行了
Else
mdbl_augend = vNewValue
End If
End Property
二 給組件添加屬性和方法的其他途徑 .添加屬性最簡單的一種方法
添加公共變量
如上例最簡單的代碼如下
Option Explicit
Public augend As Double
添加 augend 屬性
Public addend As Double
添加 addend 屬性
Public Function Plus() As Double
Plus = augend + addend
End Function
但是
該方法只能設置可讀/寫屬性
且不能對所賦值進行校驗
如果僅需添加只讀屬性
在上例中
刪除Public Property Let augend(ByVal vNewValue As Double)過程
則augend便成了一只讀屬性
不能賦值
當然
若要添加只寫屬性
只需刪除Property Get過程就可以了
.使用類生成器實用工具
VB
中還有一個添加屬性和方法的工具
在
外接程序
菜單中
單擊
外接程序管理器
在跳出的外接程序管理器對話框中選擇
VB Class Builder Utility
並在加載行為中選擇
加載/卸載
(如圖
)
然後再在
外接程序
菜單中單擊
類生成器實用工具
您一看就會用
三 告訴你幾個要注意的問題 . 上面的例子是一個簡單得不能再簡單的組件
比較實用的組件一般都至少還有一個模塊(Module)
. 如果不小心
Visual Basic 可產生
單線程
組件
也許最常見的一個陷阱就是使用了沒有被設計為在 ASP 下運行的組件
如
單線程
組件
因此
請確保在
項目屬性
頁的
通用
選項卡上將線程模塊設置為
單元線程
. 關於
類型不匹配
錯誤
一個好的建議是最好聲明 Out 參數為 Variant
注意上例中沒有這樣設置
. 關於全局變量的使用
盡量避免在組件中使用全局變量
在 Visual Basic 術語中
這表示在標准的
BAS 模塊中沒有 Public 或 Global 變量
因為Global 變量並不是真正意義上的全局
每個線程都有自己的副本
如果幾種方法恰好在同一線程中執行
它們將看到相同的變量
否則它們訪問的是這些變量的不同副本
這意味著您可能給一個全局變量賦了值(在線程 A 中)
但其另一個用戶(在線程 B 中執行)看不到新值
其原因是 Visual Basic 內部使用
線程本地存儲 (TLS)
來引用全局變量
這意味著每個線程都有自己的 Public 變量的副本
並且因為它存在多個副本
全局數據並不是真正
全局的
也就是說
恰好在同一線程中運行的用戶才會訪問到同一個變量
不論他們是否期望如此
最後順便提一下
VB
引入了一種全新的Visual Basic應用程序
IIS應用程序
你可以象創建ActiveX DLL一樣創建IIS應用程序
任何用Active Server Pages創建的應用程序都可以在VB開發環境中創建
你可以用單個的VB應用程序完全替代所有的Active Server Pages
From:http://tw.wingwit.com/Article/program/net/201311/13230.html