<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    The NoteBook of EricKong

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks
    封裝為dll會帶來很多的好處,主要包括只是產權的保護,以及效率和安全性能的提升。這個例子中被封裝的dll文件可以隱藏access數據庫的實際路徑。

    VB生成的DLL封裝ASP代碼來連接數據庫(Access)。

    本文用一個最簡單的連接access數據庫的例子來說明如何將asp代碼封裝為dll文件。

    我們用vb,最常見的方式來封裝asp代碼。

    我們需要封裝的對象如下:

    'Proconn.asp
    dim ProConn
    set ProConn=Server.CreateObject("ADODB.CONNECTION")
    ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")

    我們將下面的部分封裝
    "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")

    分析一下這段要封裝的內容,
    它的前半部分就是一個字符串:
    "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
    用&連接上后半部分的另一個字符串。
    后半部分的另一個字符串是Server.MapPath對象函數的返回值。

    下面開始這個封裝的操作過程。
    首先
    新建一個VB下的ActiveX DLL工程,工程的名稱Project1更改成ConDBDLL
    方法class1的名稱更改成cs
    工程名和方法名會在調用這個DLL的時候使用到,大家可以按照自己命名規則定義,但請注意好好使用。
    這個DLL的代碼部分書寫如下:

    Dim rp As Response
    Dim rq As Request
    Dim ap As Application
    Dim sr As Server
    Dim sn As Session

    Public Sub OnStartPage(MyScriptingContext As ScriptingContext)
    Set rp = MyScriptingContext.Response
    Set rq = MyScriptingContext.Request
    Set sr = MyScriptingContext.Server
    Set ap = MyScriptingContext.Application
    Set sn = MyScriptingContext.Session
    End Sub

    Public Sub OnEndPage()
    Set rp = Nothing
    Set rq = Nothing
    Set sr = Nothing
    Set ap = Nothing
    Set sn = Nothing
    End Sub
    '以上語句是必須的,將原本的對象作了簡化處理,并在兩個基本函數中作了處理

    Public Function ConnectDB() As Variant
    ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
    End Function
    '上面這個函數是處理前半部分字符串的,直接返回這個字符串的內容

    '另外定義下面這個函數來處理后半部分內容
    Public Function DBPath() As Variant
    DBPath = sr.MapPath("DB.asp")
    End Function
    '注意上面使用的是sr,不要使用成Server了

    到了關鍵的一步,給這個工程添加"Microsoft Active Server Pages ObjectContext Object Library" 的 Reference
    添加方法,選擇菜單中的"Project"->"Reference",在打開的對話框里選擇。
    對了,還要選擇上"microsoft activeX data objects 2.6 library"

    進行完以上操作,我們就可以編譯生成DLL了,(別忘了前面的改工程名和方法名)

    準備好數據庫文件DB.asp (由DB.mdb更改后綴而成,密碼123)

    下面就是調用封裝的連接數據庫的asp文件代碼:

    由于是自己創建的DLL,把它拷貝到相應的目錄后,必須注冊才能使用。
    注冊的方法,在“運行”中執行:
    Regsvr32.exe dllname.dll

    取消這個DLL的注冊的方法是:Regsvr32.exe /u dllname.dll

    注冊完畢,我們的工作基本上就做完了,現在我們可以使用這樣的封裝方法連接具有針對性的數據庫了。

    不過有一點需要特別注意的是:
    由于
    Dim ConDB
    set ConDB=Server.CreateObject("ConDBDLL.Conn")
    'ConDB就是創建的DLL對象
    這是在ASP中創建的對象,包括ProConn,那么我們在任何使用到(引用)ProConn.asp的其他ASP文件中記得釋放這兩個對象!
    ProConn.close
    set ProConn=nothing
    set ConDB=Nothing
    否則系統會由于對象沒有釋放,而變得越來越不堪重負。

    關于這個封裝ASP代碼連接Access數據庫的方法,我想完全適用其他數據庫的連接方法。


    再例如,下面的封裝的例子:

    首先要申明變量:

    Private WenScriptingContext As ScriptingContext
    Private WenApplication As Application
    Private WenRequest As Request
    Private WenResponse As Response
    Private WenServer As Server
    Private WenSession As Session

    為了在WenConnection類中使用ASP的內建對象,必須在此類中寫一個OnStartPage子函數。那是因為無論什么時候用戶訪問一個帶有本組件的ASP文件,IIS就會把ScriptingContext傳送給我們的對象請我們使用。這個ScriptingContext包括了全部的ASP方法和屬性,這使得我們有能力訪問所有ASP的對象。

    Public Sub OnStartPage (PassedScriptingContext As ScriptingContext)
    Set WenScriptingContext = PassedScriptingContext
    Set WenApplication = WenScriptingContext.Application
    Set WenRequest = WenScriptingContext.Request
    Set WenResponse = WenScriptingContext.Response
    Set WenServer = WenScriptingContext.Server
    Set WenSession = WenScriptingContext.Session
    End Sub

    我們既然用OnStartPage函數來創建對象,那么我們這里就用OnEndPage子函數來釋放對象:

    Public Sub OnEndPage()
    Set WenScriptingContext = Nothing
    Set WenApplication = Nothing
    Set WenRequest = Nothing
    Set WenResponse = Nothing
    Set WenServer = Nothing
    Set WenSession = Nothing
    End Sub

    接下來定義兩個函數RsResult()和DataSource():

    Public Function Rs(strsql As String) As Recordset
    Dim oConn As Connection
    Dim oRs As Recordset
    Dim strconnstring As String
    strconnstring = "driver={sql server};server=ServerName;uid=sa;pwd=;" & _
    "database=DataBaseName"
    oConn.Open strconnstring
    oRs.ActiveConnection = oConn
    strsql="Select * From tableName"
    oRs.Open strsql, oConn, 1, 3
    Set Rs = oRs
    End Function

    Public Function DataSourceConnection() As Variant
    DataSourceConnection = "driver={sql server};server=ServerName;uid=sa;pwd=;database=DataBaseName"
    End Function

    三、 存工程名為WenADODB.vbp和保存類名為WenConnection.cls,然后點擊“文件”—>“生成WenADODB.DLL”編譯成動態連接庫文件。VB在編譯好動態連接庫文件的同時也將該組件注冊到注冊表里了,要是想在另外一臺機器上注冊該組件的話,請用以下指令注冊或反注冊:

    Regsvr32 x:\路徑\WenADODB.dll x:\路徑\為WenADODB.dll文件存放的盤符和路徑

    Regsvr32 /u x:\路徑\WenADODB.dll 參數U為反注冊

    四、 在ASP文件中調用WenADODB.dll組件的例子。

    <%

    Set Conn=Server.CreateObject("WenADODB.WenConnection") ‘調用組件創建對象實例
    objConn=Conn.DataSourceConnection()
    application("strconn")=objConn

    set Rs=Server.CreateObject("ADODB.Recordset")
    sql="select * from TableName order by ID DESC"
    Rs.open sql,application("strconn"),1,3
    %>
    <Table align="center" border="1">
    <%
    if Rs.Bof and Rs.Eof then
    Response.Write "暫時還沒有任何數據。"
    else
    Do while not Rs.Eof
    %>
    <tr width=100%>
    <td width=50%><%=Rs("Field1")%></td><td width=50%><%=Rs("Field2")%></td>
    </tr>
    <%
    Rs.MoveNext
    Loop
    end if
    Rs.Close;Set Rs=Nothing
    %>
    </Table>

    五、 小結

    我們這里只是編寫了一個連接數據庫的簡單的動態連接庫文件,利用VB的強大組件編寫功能還可以寫出功能更加強大跟齊全的組件,來完成更加實用的任務

    關鍵字 如何把ASP編寫成DLL

    這篇文章主要是把ASP代碼變成組件,開發者不僅是加快了ASP的速度,而且也能保護自己的代碼.
    下面,我們會來編寫一個非常簡單的組件,重點是知道怎樣開發DLL組件,而不是其復雜的代碼!這些都要靠你們自己以后的努力了.

    服務器端組件

    首先,服務器端的組件要有別于客戶端的組件.客戶端的組件是通過網絡傳輸,依靠HTML來起作用.而且只能在IE上有用.但是服務器端的組件是運行在服務器端,它在服務器上執行各種操作.因此,所有的瀏覽器都能享用,它依靠的是服務器而不是瀏覽器.

    當IIS被請求執行一個ASP程序,它首先會在ASP文件中找到〈%%>標簽之間的代碼,并且執行它(也可以是〈scriptrunat=server>〈/script>之間的代碼).如果這個ASP程序在先前被調用過,那么它就會用內存中的編譯過的程序來向用戶返回HTML代碼,如果沒有,那么它就重新編譯.這里ASP就比CGI多一點速度優勢,因為CGI是每一個請求都使用一個線程.這樣就大大消耗了服務器的資源.

    想不想你寫的程序自己就能在IIS運行!?!現在你就行了!使用VB5(當然現在是VB6了),你就能建立DynamicLinkedLibraries(DLL文件),它能在IIS上直接運行(如果有asp文件來請求的話).

    系統和軟件的要求

    你需要一個32位的操作系統來運行ASP.當然你也得安裝IIS或PWS.我們下面的程序是在windows95+PWS+VB5的環境下開發的.

    我們開始吧

    啟動你的VB,選擇ActiveX圖標.這個圖標可以在新建工程找到!VB會提供一個默認的工程名(project1)和類名(class1).我們會將這兩個名字都改掉.在改名之前,請首先確認我們擁有MicrosoftActiveServerPagesObjectLibrary,它在我們的程序非常有用.從菜單中選擇"工程",然后在其中選擇"引用",就會出現"引用"窗口
    從中選擇MicrosoftActiveServerPagesObjectLibrary.

    給工程和類命名

    現在我們來根據自己的愛好來為project1和class1來命名吧!給它們命名也是很重要的,我們以后會用這個工程名和類名來創建這個組件的實例!后面詳細介紹.

    如何改名,我就不想多說了!
    我們的工程名改為Exmaple,類名為Helloword

    怎樣使用工程和類

    現在我們有了我們自己的工程(Example1)和類名(HelloWorld).以后我們就會在ASP代碼中使用它們的名字來引用這個組件.在ASP中我們就這樣引用,如下:

    SetObjReference=Server.CreateObject("ProjectName.ClassName")

    對于我們工程的引用就是:
    SetObjReference=Server.CreateObject("Example1.HelloWorld")
    現在我們就能用ObjReference來調用我們在組件中所創建的函數,子程序.下面我們會來寫一個SayHello的子程序,我們執行它的代碼如下:


    〈%
    SetObjReference=Server.CreateObject("Example1.HelloWorld")
    ObjReference.SayHello
    %>


    為了在Helloword類中使用ASP的方法,你必須在此類中寫一個OnStartPage
    子函數.如下:


    PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
    SetMyScriptingContext=PassedScriptingContext
    EndSub



    現在,無論什么時候用戶訪問一個帶有本組件的ASP文件,IIS就會把ScriptingContext傳送給我們的對象請我們使用.這個ScriptingContext包括了全部的ASP方法和屬性.實現上,這使得我們有能力訪問所有ASP的對象.看下面的代碼:


    PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
    SetMyScriptingContext=PassedScriptingContext
    SetMyApplication=MyScriptingContext.Application
    SetMyRequest=MyScriptingContext.Request
    SetMyResponse=MyScriptingContext.Response
    SetMyServer=MyScriptingContext.Server
    SetMySession=MyScriptingContext.Session
    EndSub


    以后我們就能用在VB中用MyApplication來代替ASP中的Application,同理可以代替Request,Server.....,不過我們來是要在OnStartPage之前來申明這些變量:


    PrivateMyScriptingContextAsScriptingContext
    PrivateMyApplicationAsApplication
    PrivateMyRequestAsRequest
    PrivateMyResponseAsResponse
    PrivateMyServerAsServer
    PrivateMySessionAsSession



    使用ASP的對象

    我們的變量現在就能像標準的ASP對象來使用了!比如,我們經常在ASP中用Request.form()來收集提交表單的數據.現在我們在我們的VB中實現這個功能,代碼如下:

    用ASP中實現:
    〈%
    MyTempVariable=Request.Form("userName")
    Response.Write("youentered"&MyTempVariable&"asyourusername")
    %>


    在VB中實現:


    MyTempVariable=MyRequest.Form("userName")
    MyResponse.Write("youentered"&MyTempVariable&"asyourusername")



    通過使用MyResponse來代替Response,我們能夠使用所有Response的方法,當然,MyResponse這個名字可以隨便來取,你甚至可以就取Response.
    另一件我們得注意的是,我們得在我們的建立的類中,寫上OnEndPage子函數,這個OnStartPage是相反的!OnStartPage是創建對象,OnEndPage是消毀對象.



    PublicSubOnEndPage()
    SetMyScriptingContext=Nothing
    SetMyApplication=Nothing
    SetMyRequest=Nothing
    SetMyResponse=Nothing
    SetMyServer=Nothing
    SetMySession=Nothing
    EndSub



    SayHello方法

    我們來建立一個子函數,用于顯示"HolleWorld".這個SayHello方法只是HelloWorld這個類中一個子函數,我們以后會在ASP中用以下的顯示這個方法


    〈%
    SetObjReference=Server.CreateObject("Example1.HelloWorld")
    ObjReference.SayHello
    %>



    SayHello的程序,很簡單的!

    PublicSubSayHello()
    MyResponse.Write("HelloWorld")
    EndSub



    現在一個小型的組件編寫完成,剩下的工作就是編譯這個組件,在"工程"菜單中保存它,取什么名字都可以,我們用Exmaple1.vbp吧!然后就用在菜單中選擇"makeexmaple1.dll",將其編譯成DLL文件.一個組件就真正完成了!


    注意,編譯了此組件那么你就得先把你的PWS關掉,然后再編譯此組件.否則VB就會告訴你些組件在使用中.

    在ASP中使用我們的自己的組件.

    當你更正了在編譯中的錯誤,成功地編譯了example1這個工程,現在你就得拿出你最喜歡的HTML編輯器來寫下下面的語句,保存為ASP文件.


    〈HTML>
    〈HEAD>
    〈TITLE>Example1〈/TITLE>
    〈/HEAD>

    〈BODY>

    〈%
    SetObjReference=Server.CreateObject("Example1.HelloWorld")
    ObjReference.SayHello
    %>

    〈/BODY>
    〈/HTML>

    運行后即可看到結果:

    HelloWorld

    注冊組件

    如果你想和你的朋友,鄰居分享你的組件,那么你就得在你的系統上注冊你的組件.我們一般使用Regsvr32.exe來注冊組件.注冊后你的組件會出現在Win95/Win98的windows/system目錄中.下面是一個注冊的例子:

    Regsvr32.exeC:/wwwroot/Example1/Example1.dll


    在你的系統中,VB會自動給你注冊,所以你很少用到Regsvr32.exe

    這里只是寫了一個非常小的組件,你可以寫好自己的更大的組件,而且還可以用VB中的很多控件.


    附錄:建立注冊DLL和反注冊DLL文件的快捷方式
    有的程序員經常要注冊或者反注冊自己寫的dll文件,加一個快捷方式會減少自己的工作量:

    Windows Registry Editor Version 5.00


    [HKEY_CLASSES_ROOT\dllfile\shell]


    [HKEY_CLASSES_ROOT\dllfile\shell\register]


    [HKEY_CLASSES_ROOT\dllfile\shell\register\command]

    @="regsvr32 %1"


    [HKEY_CLASSES_ROOT\dllfile\shell\Unregister]

    "Command"="regsvr32 %1 /u"


    [HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]

    @="regsvr32 %1 /u"

    當我們需要注冊或者反注冊dll時,只要在該dll文件上按下鼠標右鍵即可!



    附錄注冊和注銷dll文件的方法:
    一個快速注冊 DLL 及 OCX 的方法
    有時候我們在 VB 中要引用某一個 DLL 或 OCX 時,會出現文件未注冊的訊息,這時,我們可以使用人工注冊的方法,也就是直接在命令列中使用 regsvr32.exe 來做,做法如下:

    文件注冊:C:\Windows\System\Regsvr32.exe C:\Windows\System\Test.ocx
    取消注冊:C:\Windows\System\Regsvr32.exe /u C:\Windows\System\Test.ocx

    這些動作我們也可以直接寫到程序中,使用 Shell 來執行,但是我現在要說的,都不是上面提到的方法!



    1、在資源管理器中找到 C:\Windows\System\Regsvr32.exe 并【復制】 ( 按鼠標右鍵選復制 )
    2、將目錄移到 C:\Windows\SendTo 后,執行【貼上快捷方式】 ( 按鼠標右鍵選貼上快捷方式 )
    3、將快捷方式名稱改成【REGISTER】
    4、OK

    現在,如果您想替某一個文件做注冊動作,例如:C:\Windows\System\Test.ocx,您只要打開資源管理器,找到 C:\Windows\System\Test.ocx,按鼠標右鍵選【傳送到】【REGISTER】即可完成注冊動作了!

    注:有一個地方要注意的是,Regsvr32.exe 只能注冊 32 位的文件!如果要用它來注冊 16 位的文件,會有錯誤訊息產生。


    附錄 某些dll文件的功能:
    一、輕松修復IE瀏覽器

      很多經常上網的朋友都有過 這樣的遭遇:IE不能打開新的窗口,用鼠標點擊超鏈接也沒有任何反應。這時重裝IE一般能解決問題。其實不必這么麻煩,使用Regsvr32命令就可以輕松搞定。

      在“開始→運行”中鍵入“regsvr32 actxprxy.dll”命令,點擊“確定”按鈕,這時會彈出一個信息對話框“DllRegisterServer in actxprxy.dll succeeded”,點擊“確定”;然后再在“開始→運行”中鍵入“regsvr32 shdocvw.dll”命令,單擊“確定”即可。重新啟動后IE已經被輕松修復了。

    二、解決Windows無法在線升級的問題

      Windows的漏洞很多,每隔一段時間就需要使用“Windows Update”升級程序進行在線升級,不過“Windows Update”經常出現無法使用的情況,這時,我們可以使用Regsvr32來解決這個問題。

      在“開始→運行”中鍵入“regsvr32 wupdinfo.dll”,點擊“確定”按鈕,這樣在系統中就重新注冊了“Windows Update”組件,重新啟動后問題已經解決。

    三、防范網絡腳本病毒有新招

      網絡腳本病毒嵌在網頁中,上網時在不知不覺中機器就會感染上這種病毒。筆者認為單純使用殺毒軟件并不能有效地防范這些腳本病毒,必須從病毒傳播的機理入手。網絡腳本病毒的復制、傳播都離不開FSO對象(File System Object,文件系統對象),因此禁用FSO對象就能有效地控制腳本病毒的傳播。操作方法很簡單:

      在“開始→運行”中鍵入“regsvr32 /u scrrun.dll”就可以禁用FSO對象;如果需要使用FSO對象,鍵入“regsvr32 scrrun.dll”命令即可。

    四、卸載Win XP自帶的“雞肋”功能

      Win XP以功能強大而著稱,但有些功能卻常常令人有“雞肋”之感,比如Win XP自帶的ZIP功能和圖片預覽功能,不僅占用了系統資源,功能也遠不如第三方軟件強大。其實用Regsvr32命令可以很容易地卸載這些功能。

      在“開始→運行”中鍵入“regsvr32 /u zipfldr.dll”,單擊“確定”按鈕,彈出卸載成功信息框后就完成了ZIP功能的卸載;要恢復ZIP功能,鍵入“regsvr32 zipfldr.dll”即可。同樣,卸載圖片預覽功能也很簡單,在“開始→運行”中鍵入“regsvr32 /u thumbvw.dll”即可;如果要恢復該功能,只須鍵入“regsvr32 thumbvw.dll”。

    五、讓WMP播放器支持RM格式

      很多朋友喜歡用Windows Media Player(以下簡稱WMP)播放器,但是它不支持RM格式,難道非得安裝其它播放軟件嗎?筆者有辦法。

      以Win XP為例,首先下載一個RM格式插件,解壓縮后得到兩個文件夾: Release(用于Windows 9x)和Release Unicode (用于Windows 2000/XP);將Release Unicode文件夾下的RealMediaSplitter.ax文件拷貝到“系統盤符\WINDOWS\System32\”目錄下;在“開始→運行”中鍵入“regsvr32 RealMediaSplitter.ax”,點擊“確定”即可。接著下載解碼器,如Real Alternative,安裝后就能用WMP播放RM格式的影音文件了。

    附錄:注冊和反注冊dll文件的批處理



    dll.bat
    ------------------------------
    @Regsvr32.exe AdminDLL.dll


    un.bat
    -------------------------------------
    @Regsvr32.exe /u AdminDLL.dll
    posted on 2010-06-01 12:47 Eric_jiang 閱讀(469) 評論(0)  編輯  收藏 所屬分類: ASP
    主站蜘蛛池模板: 日韩精品免费一级视频| 91亚洲导航深夜福利| 一级毛片无遮挡免费全部| 国产在线观看免费不卡| 国产亚洲欧美日韩亚洲中文色| 九九九精品成人免费视频| 日韩亚洲国产综合高清| 性感美女视频在线观看免费精品| 亚洲色偷偷综合亚洲AV伊人蜜桃| 最近中文字幕免费mv视频8| 中文文字幕文字幕亚洲色| 国产精品免费观看久久| 一本色道久久88亚洲精品综合| 嫩草影院免费观看| 亚洲精华国产精华精华液好用| 亚洲欧美日韩久久精品| 猫咪社区免费资源在线观看 | 免费的黄色网页在线免费观看| 四虎免费永久在线播放| 人妻仑刮八A级毛片免费看| 国产福利电影一区二区三区,亚洲国模精品一区 | 国产成人青青热久免费精品| 亚洲国产成人无码AV在线影院| 日韩在线天堂免费观看| 美女被羞羞网站免费下载| 亚洲人成色77777在线观看大| 成在线人免费无码高潮喷水| 久久精品国产96精品亚洲| 18女人毛片水真多免费| 亚洲一级特黄特黄的大片| 免费看少妇作爱视频| 精品亚洲国产成人av| 亚洲色偷拍区另类无码专区| 中国性猛交xxxxx免费看| 亚洲第一精品福利| 18禁免费无码无遮挡不卡网站| 亚洲欧洲无卡二区视頻| 免费在线观看黄色毛片| 中文字字幕在线高清免费电影| 日木av无码专区亚洲av毛片| 亚洲人成电影网站免费|