六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

最新ASP講座之10:自己手工編寫組件

[摘要]在前面的內容中,我們學習了組件的使用,網上的組件雖然不少,但往往小小的一個組件就要你掏出美元來,而國產的組件又太少,想掏點人民幣還沒地兒好掏,算了,您干脆自己寫吧,其實編寫組件并不難,無非是剛開始寫...
在前面的內容中,我們學習了組件的使用,網上的組件雖然不少,但往往小小的一個組件就要你掏出美元來,而國產的組件又太少,想掏點人民幣還沒地兒好掏,算了,您干脆自己寫吧,其實編寫組件并不難,無非是剛開始寫低水平的組件,慢慢開始寫高水平的組件而已。要編寫ActiveX Server Components,有多種工具可供選擇:Visual Basic、C++、Java等等,這里選擇最簡單的VB6.0,只要你以前用過VB,包你不到1小時之內,做一個小組件出來。

一、 組件編寫速成——編寫組件最基本的步驟
本部分主要講解編寫組件的基本步驟,如果你有進一步學習的欲望,請參照VB6.0幫助文檔中“創建 ActiveX DLL”部分(MSDN Library中文檔文件名為Vbcon98.chm)。
目的:編寫一個最簡單的加法器組件,這個組件有兩個屬性,一個方法。我們從最熟悉的地方開始,那就是先假設這個組件已經存在,看看在ASP使用該組件的代碼:
<%
Dim objSum
‘ 先創建該組件組件標識為 TestDll.Sum
Set objSum = Server.CreateObject("TestDll.Sum")
‘ 記住TestDll.Sum 中的“TestDll”,“Sum”。
objSum.augend = 10.52       ‘augend 屬性為被加數
objSum.addend = 382.41      ‘addend 屬性為加數
Result = objSum.Plus        ‘Plus 方法求和
Response.Write Result
Set objSum = Nothing
%>
請務必記住這幾個關鍵詞:TestDll、Sum、augend、addend、Plus,這將與接下來的工作緊密關聯。下面是詳細步驟:
1. 運行VB6.0,在“文件”菜單中,單擊“新建工程”→在“新建工程”對話框中,雙擊“ActiveX DLL”圖標→Visual Basic 將向該新工程中自動添加一個類模塊 Class1(在“工程資源管理器”中可以看到,如圖1)。
2.按 F4 鍵打開“屬性”窗口。雙擊“名稱”屬性把“Class1”改成 Sum。
3.在“工程”菜單中,單擊“工程1 屬性”打開“工程屬性”對話框。在“工程名稱”中填寫TestDll,在“工程描述”中填寫“創建ActiveX DLL示例”。如圖2。
    提示:ASP創建組件中的標識TestDLL.Sum這兩項的意思明白了吧。
4.在“文件”菜單中,單擊“保存工程”,分別使用下面的名稱保存工程文件:SetupDll.cls和SetupDll.vbp。
5.為 Sum 類創建屬性:
(1) 在“工具”菜單中,選擇“添加過程”打開“添加過程”對話框。在“名稱”框中,輸入augend,單擊“屬性”,然后單擊“確定”,如圖3(注意:當前焦點應在代碼窗口,否則“添加過程”菜單無效)。
(2) 在“工具”菜單中,選擇“添加過程”打開“添加過程”對話框。在“名稱”框中,輸入addend,單擊“屬性”,然后單擊“確定”。
6.為 Sum 類創建方法:
在“工具”菜單中,單擊“添加過程”打開“添加過程”對話框。在“名稱”框中,輸入Plus,在類型中,你可以選擇“子程序”或“函數”,本例中由于要返回加數與被加數之和,故單擊“函數”,然后單擊“確定”。
現在,前面ASP代碼中的五個關鍵詞語都已用上,這下很多東西都明白了吧。
7.類模塊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 = 10.52 語句時,將調用 Property Let 過程,將10.52賦給 mdbl_augend。
8.最后一步,在“文件”菜單中,單擊“生成.Dll(K)…”,生成文件SetupDll.dll。

到這里,組件已創建好了。現在,我們可以先在VB6中編寫一個測試工程,測試一下該文件正確與否。
1.在“文件”菜單中,單擊“新建工程” →雙擊“標準EXE”。
2.在“工程”菜單中,單擊“引用” →在“引用”對話框中按“瀏覽”按鈕,選擇剛剛編譯過的“SetupDll.dll”文件→單擊“確定”。
3.最后在代碼窗口中編寫如下代碼:
Option Explicit
Private Sub Form_Load()
    Dim objSum As TestDll.Sum
    Set objSum = New Sum
    
    objSum.augend = 10.52
    objSum.addend = 382.41
    MsgBox objSum.Plus
End Sub
運行一下,結果正確,接下來我們在ASP中使用這個組件。將SetupDll.dll拷到Web服務器中,并用“Regsvr32.exe setupdll.dll”命令注冊該組件,然后在瀏覽器中執行本部分開頭的ASP程序。如果不行的話,你可以嘗試先用VB6的打包工具打包,然后再安裝,組件會自動注冊,而且一些必需的VB6運行文件也會自動安裝。
說明:本部分所有程序均在下載包的Setupdll.zip中。
    上面的例子中我們使用屬性過程Property Get和Property Let來添加屬性(Property Get讀取屬性的值,而Property Let給屬性賦值),若需要對設置的值進行校驗,可在Property Let過程編寫適當代碼。如下面代碼:
Public Property Let augend(ByVal vNewValue As Double)
    If vNewValue < 100 Then
        MsgBox "搞什么!小于100的值,自己心算就行了"
    Else
        mdbl_augend = vNewValue
    End If
End Property

二、 給組件添加屬性和方法的其他途徑
1.添加屬性最簡單的一種方法:添加公共變量,如上例最簡單的代碼如下:
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過程就可以了。

2.使用類生成器實用工具
VB6中還有一個添加屬性和方法的工具:在“外接程序”菜單中,單擊“外接程序管理器”,在跳出的外接程序管理器對話框中選擇“VB Class Builder Utility”,并在加載行為中選擇“加載/卸載”(如圖4)。然后再在“外接程序”菜單中單擊“類生成器實用工具”,您一看就會用。

三、 告訴你幾個要注意的問題
1. 上面的例子是一個簡單得不能再簡單的組件,比較實用的組件一般都至少還有一個模塊(Module)。
2. 如果不小心, Visual Basic 可產生“單線程”組件
    也許最常見的一個陷阱就是使用了沒有被設計為在 ASP 下運行的組件,如“單線程”組件。因此,請確保在“項目屬性”頁的“通用”選項卡上將線程模塊設置為“單元線程”。
3. 關于“類型不匹配”錯誤。
    一個好的建議是最好聲明 Out 參數為 Variant,注意上例中沒有這樣設置。
4. 關于全局變量的使用。
    盡量避免在組件中使用全局變量。在 Visual Basic 術語中,這表示在標準的 .BAS 模塊中沒有 Public 或 Global 變量。因為Global 變量并不是真正意義上的全局。每個線程都有自己的副本,如果幾種方法恰好在同一線程中執行,它們將看到相同的變量;否則它們訪問的是這些變量的不同副本。這意味著您可能給一個全局變量賦了值(在線程 A 中),但其另一個用戶(在線程 B 中執行)看不到新值。其原因是 Visual Basic 內部使用“線程本地存儲 (TLS)”來引用全局變量。這意味著每個線程都有自己的 Public 變量的副本,并且因為它存在多個副本,全局數據并不是真正“全局的”。也就是說,恰好在同一線程中運行的用戶才會訪問到同一個變量,不論他們是否期望如此。

    最后順便提一下,VB6.0引入了一種全新的Visual Basic應用程序:IIS應用程序。你可以象創建ActiveX DLL一樣創建IIS應用程序,任何用Active Server Pages創建的應用程序都可以在VB開發環境中創建,你可以用單個的VB應用程序完全替代所有的Active Server Pages。




主站蜘蛛池模板: 四虎伊人 | 亚洲精品成人久久久影院 | 亚洲欧美成人在线 | 日日摸夜夜添夜夜添一区二区 | 日本韩国在线播放 | 天天热 | 亚洲综合网在线观看 | 天啪天天久久天天综合啪 | 一级女人毛片人一女人 | 欧美亚洲一区二区三区在线 | 一级做a爰片性色毛片刺激 一级做a爰片欧美一区 | 色视频线观看在线播放 | 欧美中文在线视频 | 亚洲国产欧美在线人成精品一区二区 | 欧美又大又粗又长又硬 | 亚洲欧美中文日韩在线v日本 | 四虎在线观看免费永久 | 欧美资源在线 | 欧美一级黄色片子 | 亚洲第一男人天堂 | 日韩黄色小说 | 日韩三级一区二区三区 | 深夜福利亚洲 | 在线观看亚洲精品专区 | 欧美婷婷 | 最近手机中文字幕1页 | 一区二区三区视频在线观看 | 在线国产资源 | 日本高清视频在线www色下载 | 伊人久久精品成人网 | 日韩一区国产二区欧美三 | 中文婷婷 | 最近最新免费视频8 | 欧美桃色视频 | 青青青手机视频 | 日日摸夜夜摸人人嗷嗷叫 | 一二三四免费观看在线8 | 青草资源视频在线高清观看 | 日韩成人免费在线视频 | 啪啪欧美 | 亚洲第一综合网 |