vbdll:使用VB将ASP代码封装生成DLL文件

  、引言

  Server端脚本运行环境它简单易用不需要编译和连接脚本可以在 Server端直接运行并且它支持多用户、多线程在 Web开发中得到了广泛应用服务器端组件有别于客户端组件客户端组件是通过网络传输,依靠HTML来起作用而且只能在IE上有用但是服务器端组件是运行在服务器端,它在服务器上执行各种操作因此所有浏览器都能享用,它依靠是服务器而不是浏览器但是 ASP脚本是纯文本格式所以恶意者通过源代码可以很容易地看到原本不该看到页面内容因此保护ASP源代码显得非常重要将ASP代码封装成DLL,不仅加快了ASP代码执行速度,而且也能保护原代码当IIS被请求执行个ASP,它首先会在ASP文件中找到标签的间代码,并且执行它(也可以是的间代码)如果这个ASP在先前被过,那么它就会用内存中编译过来向用户返回HTML代码,如果没有,那么它就重新编译这样就大大节省了服务器资源

   2、实现思路方法

  启动你VB,选择ActiveX图标这个图标可以在新建工程找到!VB会提供个默认工程名(project1)和类名(1)在动手的前请首先确认我们拥有Microsoft ActiveX Data Object 2.0 Library,它在我们非常有用从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗口,从中选择Microsoft ActiveX Data Object 2.0 Library

  现在我们有了我们自己工程(project1)和类名(1)以后我们就会在ASP代码中使用它们名字来引用这个组件在ASP中我们就这样引用,如下:

  Set ObjReference = Server.CreateObject("ProjectName.ClassName")

  为了在类中使用ASP思路方法,你必须在此类中写上和终止这两个输入如下代码:清单中

  Class1.cls中Private Sub Class_Initialize和Private Sub Class_Terminate

  将ASP代码中关键功能制作成动态链接库(.dll)部分隐藏 ASP源代码 例如:清单中Global.bas和Class1.cls中输入代码(代码主要功能是检索数据库中记录并显示出来)

  在VB下拉菜单中选择文件→生成article.dll→选择要保存目录找到article.dll将其复制到系统盘system32文件夹中最后步注册DLL文件在开始菜单中选择运行输入regsvr32 c:winntsystem32article.dll

   3、清单

  Global.bas中代码:

以下是引用片段:
PublicobjContextAsObjectContext
PublicApplicationAsASPTypeLibrary.Application
PublicServerAsASPTypeLibrary.Server
PublicSessionAsASPTypeLibrary.Session
PublicResponseAsASPTypeLibrary.Response
PublicRequestAsASPTypeLibrary.Request
  Class1.cls中代码:
PrivateSubClass_Initialize
OnErrorResumeNext
SetobjContext=GetObjectContext
SetApplication=objContext.Item("Application")
SetServer=objContext.Item("Server")
SetSession=objContext.Item("Session")
SetRequest=objContext.Item("Request")
SetResponse=objContext.Item("Response")
EndSub
PrivateSubClass_Terminate
OnErrorResumeNext
SetApplication=Nothing
SetServer=Nothing
SetSession=Nothing
SetRequest=Nothing
SetResponse=Nothing
SetobjContext=Nothing
EndSub
PublicSubAspClassInit
OnErrorGoToErr
Setconn=Server.CreateObject("ADODB.Connection")
strcon="Provider=Microsoft.Jet.OLEDB.4.0;"&_
"DataSource="&Server.MapPath("Article.mdb")
conn.Openstrcon
Setrs=Server.CreateObject("ADODB.Record")
sql="select*fromArticleorderbyArticleIDdesc"
rs.Opensql,conn,1,1
Response.Write"<html>"&vbCrLf
Response.Write"<head>"&vbCrLf
Response.Write"<metahttp-equiv=""Content-Type""content=""text/html;char=gb2312"">"&vbCrLf
Response.Write"<title>文章管理系统-CSSTUDIO</title>"&vbCrLf
Response.Write"</head>"&vbCrLf
Response.Write"<bodybgcolor=""#FFFFFF""topmargin=""0"">"&vbCrLf
Response.Write"<tablewidth=""100%""border=""0""cellpadding=""2""cellspacing=""0"">"&vbCrLf
Response.Write"<tr>"&vbCrLf
Response.Write"<tdwidth=""742""height=""20"">文章标题</td>"&vbCrLf
Response.Write"<tdwidth=""90"">点击</td>"&vbCrLf
Response.Write"<tdwidth=""145"">添加日期</td>"&vbCrLf
Response.Write"</tr>"&vbCrLf
Response.Write"</table>"&vbCrLf
WhileNotrs.EOFAndRows<rs.PageSize
Response.Write"<tablewidth=""100%""border=""0""cellspacing=""0""cellpadding=""0"">"&vbCrLf
Response.Write"<tr>"&vbCrLf
Response.Write"<tdwidth=""747""height=""20"">☆<ahref=""view.asp?id="
Response.Writers("ArticleID")
Response.Write""">"&vbCrLf
Response.Write""
Response.Writers("标题")
Response.Write"</a></td>"&vbCrLf
Response.Write"<tdwidth=""94"">"
Response.Writers("点击")
Response.Write"</td>"&vbCrLf
Response.Write"<tdwidth=""148"">"
Response.Writers("添加日期")
Response.Write"</td>"&vbCrLf
Response.Write"</tr>"&vbCrLf
Response.Write"</table>"&vbCrLf
rs.MoveNext
Wend
Response.Write"</body>"&vbCrLf
Response.Write"</html>"&vbCrLf
rs.Close
Setrs=Nothing
conn.Close
Setconn=Nothing
ExitSub
Err:
IfErr.Number=-13572468ThenExitSub
ResumeNext
EndSub
  使用article.dll后index.asp中代码:

以下是引用片段:
<%DimAspTransBuilderObject
SetAspTransBuilderObject=Server.CreateObject("article.Class1")
AspTransBuilderObject.AspClassInit
SetAspTransBuilderObject=Nothing%>


  使用article.dll前index.asp中代码:

以下是引用片段:
<%Setconn=Server.CreateObject("ADODB.Connection")
strcon="Provider=Microsoft.Jet.OLEDB.4.0;"&_
"DataSource="&Server.MapPath("Article.mdb")
conn.Openstrcon%>
<%Setrs=Server.CreateObject("ADODB.Record")
sql="select*fromArticleorderbyArticleIDdesc"
rs.Opensql,Conn,1,1%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;char=gb2312">
<title>文章管理系统-CSSTUDIO</title>
</head>
<bodybgcolor="#FFFFFF"topmargin="0">
<tablewidth="100%"border="0"cellpadding="2" 
cellspacing="0">
<tr>
<tdwidth="742"height="20">文章标题</td>
<tdwidth="90">点击</td>
<tdwidth="145">添加日期</td>
</tr>
</table>
<%WhileNotRs.EofAndRows<Rs.PageSize%>
<tablewidth="100%"border="0"cellspacing="0" 
cellpadding="0">
<tr>
<tdwidth="747"height="20">☆<ahref="view.asp?id=<% 
=rs("ArticleID")%>">
<%=rs("标题")%></a></td>
<tdwidth="94"><%=rs("点击")%></td>
<tdwidth="148"><%=rs("添加日期")%></td>
</tr>
</table>
<%Rs.MoveNext
Wend%>
</body>
</html>
<%rs.close
rs=nothing
conn.close
conn=nothing%>
   4、结论



  这些代码是在服务器端运行所以客户端不需要安装任何东西这仅仅是用ActiveX DLL所能实现功能小小例子你们可以写好自己更大组件,而且还可以用VB中很多Control控件让我们用组件来扩展我们功能吧!也希望多多看到我们中国人组件但愿本文能起到抛砖引玉作用



Tags:  vb注册dll vb.netdll vb调用dll vbdll

延伸阅读

最新评论

发表评论