使用VB将ASP代码封装生成DLL文件
程序员文章站
2023-11-17 21:12:46
使用VB将ASP代码封装生成DLL文件...
一、引言
server端的脚本运行环境,它简单易用,不需要编译和连接,脚本可以在 server端直接运行,并且它支持多用户、多线程,在 web开发中得到了广泛的应用。服务器端的组件有别于客户端的组件。客户端的组件是通过网络传输,依靠html来起作用,而且只能在ie上有用。但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作。因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器。但是,因为 asp脚本是纯文本格式,所以恶意者通过源代码可以很容易地看到原本不该看到的页面内容。因此,保护asp源代码显得非常重要。将asp代码封装成dll,不仅加快了asp代码的执行速度,而且也能保护原代码。当iis被请求执行一个asp程序,它首先会在asp文件中找到标签之间的代码,并且执行它(也可以是之间的代码)。如果这个asp程序在先前被调用过,那么它就会用内存中的编译过的程序来向用户返回html代码,如果没有,那么它就重新编译。这样就大大节省了服务器的资源。
二、实现方法
启动你的vb,选择activex图标。这个图标可以在新建工程找到!vb会提供一个默认的工程名(project1)和类名(class1)。在动手之前请首先确认我们拥有microsoft activex data object 2.0 library,它在我们的程序非常有用。从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗口,从中选择microsoft activex data object 2.0 library。
现在我们有了我们自己的工程(project1)和类名(class1)。以后我们就会在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:\winnt\system32\article.dll。
三、程序清单
global.bas中的代码:
使用article.dll前的index.asp中的代码:
server端的脚本运行环境,它简单易用,不需要编译和连接,脚本可以在 server端直接运行,并且它支持多用户、多线程,在 web开发中得到了广泛的应用。服务器端的组件有别于客户端的组件。客户端的组件是通过网络传输,依靠html来起作用,而且只能在ie上有用。但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作。因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器。但是,因为 asp脚本是纯文本格式,所以恶意者通过源代码可以很容易地看到原本不该看到的页面内容。因此,保护asp源代码显得非常重要。将asp代码封装成dll,不仅加快了asp代码的执行速度,而且也能保护原代码。当iis被请求执行一个asp程序,它首先会在asp文件中找到标签之间的代码,并且执行它(也可以是之间的代码)。如果这个asp程序在先前被调用过,那么它就会用内存中的编译过的程序来向用户返回html代码,如果没有,那么它就重新编译。这样就大大节省了服务器的资源。
二、实现方法
启动你的vb,选择activex图标。这个图标可以在新建工程找到!vb会提供一个默认的工程名(project1)和类名(class1)。在动手之前请首先确认我们拥有microsoft activex data object 2.0 library,它在我们的程序非常有用。从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗口,从中选择microsoft activex data object 2.0 library。
现在我们有了我们自己的工程(project1)和类名(class1)。以后我们就会在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:\winnt\system32\article.dll。
三、程序清单
global.bas中的代码:
以下是引用片段: public objcontext as objectcontext public application as asptypelibrary.application public server as asptypelibrary.server public session as asptypelibrary.session public response as asptypelibrary.response public request as asptypelibrary.request class1.cls中的代码: private sub class_initialize() on error resume next set objcontext = getobjectcontext set application = objcontext.item("application") set server = objcontext.item("server") set session = objcontext.item("session") set request = objcontext.item("request") set response = objcontext.item("response") end sub private sub class_terminate() on error resume next set application = nothing set server = nothing set session = nothing set request = nothing set response = nothing set objcontext = nothing end sub public sub aspclassinit() on error goto err set conn = server.createobject("adodb.connection") strcon = "provider=microsoft.jet.oledb.4.0;" & _ "data source=" & server.mappath("article.mdb") conn.open strcon set rs = server.createobject("adodb.recordset") sql = "select * from article order by articleid desc" rs.open sql, conn, 1, 1 response.write "<html>" & vbcrlf response.write "<head>" & vbcrlf response.write "<meta http-equiv=""content-type"" content=""text/html; charset=gb2312"">" & vbcrlf response.write "<title>文章管理系统-csstudio</title>" & vbcrlf response.write "</head>" & vbcrlf response.write "<body bgcolor=""#ffffff"" topmargin=""0"">" & vbcrlf response.write "<table width=""100%"" border=""0"" cellpadding=""2"" cellspacing=""0"">" & vbcrlf response.write " <tr>" & vbcrlf response.write " <td width=""742"" height=""20"">文章标题</td>" & vbcrlf response.write " <td width=""90"">点击</td>" & vbcrlf response.write " <td width=""145"">添加日期</td>" & vbcrlf response.write " </tr>" & vbcrlf response.write "</table>" & vbcrlf while not rs.eof and rows < rs.pagesize response.write "<table width=""100%"" border=""0"" cellspacing=""0"" cellpadding=""0"">" & vbcrlf response.write " <tr>" & vbcrlf response.write " <td width=""747"" height=""20"">☆<a href=""view.asp?id=" response.write rs("articleid") response.write """>" & vbcrlf response.write " " response.write rs("标题") response.write "</a></td>" & vbcrlf response.write " <td width=""94"">" response.write rs("点击") response.write "</td>" & vbcrlf response.write " <td width=""148"">" response.write rs("添加日期") 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 set rs = nothing conn.close set conn = nothing exit sub err: if err.number = -13572468 then exit sub resume next end sub |
使用article.dll后的index.asp中的代码:
以下是引用片段: <%dim asptransbuilderobject set asptransbuilderobject = server.createobject("article.class1") asptransbuilderobject.aspclassinit set asptransbuilderobject = nothing%> |
使用article.dll前的index.asp中的代码:
以下是引用片段: <% set conn=server.createobject("adodb.connection") strcon = "provider=microsoft.jet.oledb.4.0;" & _ "data source=" & server.mappath("article.mdb") conn.open strcon %> <% set rs = server.createobject ("adodb.recordset") sql="select * from article order by articleid desc" rs.open sql, conn,1,1 %> <html> <head> <meta http-equiv="content-type" content="text/html; charset=gb2312"> <title>文章管理系统-csstudio</title> </head> <body bgcolor="#ffffff" topmargin="0"> <table width="100%" border="0" cellpadding="2" cellspacing="0"> <tr> <td width="742" height="20">文章标题</td> <td width="90">点击</td> <td width="145">添加日期</td> </tr> </table> <% while not rs.eof and rows<rs.pagesize %> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="747" height="20">☆<a href="view.asp?id=<% = rs("articleid") %>"> <% =rs("标题") %></a></td> <td width="94"><% = rs("点击") %></td> <td width="148"><% = rs("添加日期") %></td> </tr> </table> <% rs.movenext wend %> </body> </html> <% rs.close set rs=nothing conn.close set conn=nothing %> |
四、结论
因为这些代码是在服务器端运行的,所以客户端不需要安装任何东西。这仅仅是用activex dll所能实现的功能的小小的例子。你们可以写好自己的更大的组件,而且还可以用vb中的很多控件。让我们用组件来扩展我们的程序的功能吧!也希望多多的看到我们中国人的组件。但愿本文能起到抛砖引玉的作用。
上一篇: 楚汉棋缘注册码序列号