CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

高分请教一个asp用dll封装的问题

楼主qq_428328(我)2005-02-02 19:02:24 在 Web 开发 / ASP 提问

我是个asp爱好者,我想和大家学习一下asp封装、调用dll方面的事情!  
  做dll,用vb.net好,还是c#.net好呢,各有什么优点?我除asp外,很少接触其他的语言,基本上说不了解,但是为了asp我要学习一门,就在vb.net和c#.net中间选学,我该如何选。  
   
  另外请大家告诉我一个asp封装的dll源代码(中间最好适当的地方有解释),如何是操作工具生成dll的。  
   
  非常感谢大家,欢迎大家和我交流,可以给我留言!  
   
    邮箱:428328@qq.com 问题点数:100、回复次数:11Top

1 楼qq_428328(我)回复于 2005-02-02 19:04:47 得分 0

顶Top

2 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-02-02 19:31:17 得分 1

帮你顶哈!Top

3 楼CnEve(龙哥哥)回复于 2005-02-02 19:56:21 得分 1

用vb6就行了Top

4 楼bighai78(bighai)回复于 2005-02-02 20:11:37 得分 20

如何把ASP编写成DLL?  
  这篇文章主要是把ASP代码变成组件,开发者不仅是加快了ASP的速度,而且也能保护自己的代码.    
  下面,我们会来编写一个非常简单的组件,重点是知道怎样开发DLL组件,而不是其复杂的代码!这些都要靠你们自己以后的努力了.    
   
  服务器端组件    
   
  首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依靠HTML来起作用.而且只能在IE上有用.但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作.因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器.    
   
  当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到   〈%   %>标签之间的代码,并且执行它(也可以是〈script   runat=server>〈/script>之间的代码).如果这个ASP程序在先前被调用过,那么它就会用内存中的编译过的程序来向用户返回HTML代码,如果没有,那么它就重新编译.这里ASP就比CGI多一点速度优势,因为CGI是每一个请求都使用一个线程.这样就大大消耗了服务器的资源.    
   
  想不想你写的程序自己就能在IIS运行!?!现在你就行了!使用VB5(当然现在是VB6了),你就能建立Dynamic   Linked   Libraries   (DLL   文件),它能在IIS上直接运行(如果有asp文件来请求的话).    
   
  系统和软件的要求    
   
  你需要一个32位的操作系统来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows95+PWS+VB5的环境下开发的.    
   
  我们开始吧    
   
  启动你的VB,选择ActiveX图标.这个图标可以在新建工程找到!VB会提供一个默认的工程名(project1)和类名(class1).我们会将这两个名字都改掉.在改名之前,请首先确认我们拥有Microsoft   Active   Server   Pages   Object   Library,它在我们的程序非常有用.从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗口    
  从中选择Microsoft   Active   Server   Pages   Object   Library.    
   
  给工程和类命名    
   
  现在我们来根据自己的爱好来为project1和class1来命名吧!给它们命名也是很重要的,我们以后会用这个工程名和类名来创建这个组件的实例!后面详细介绍.    
   
  如何改名,我就不想多说了!    
  我们的工程名改为Exmaple,类名为Helloword    
   
  怎样使用工程和类    
   
  现在我们有了我们自己的工程(Example1)和类名(HelloWorld).以后我们就会在ASP代码中使用它们的名字来引用这个组件.在ASP中我们就这样引用,如下:    
   
  Set   ObjReference   =   Server.CreateObject("ProjectName.ClassName")    
   
  对于我们工程的引用就是:    
  Set   ObjReference   =   Server.CreateObject("Example1.HelloWorld")    
  现在我们就能用ObjReference来调用我们在组件中所创建的函数,子程序.下面我们会来写一个SayHello的子程序,   我们执行它的代码如下:    
   
   
  〈%    
  Set   ObjReference   =   Server.CreateObject("Example1.HelloWorld")    
  ObjReference.SayHello    
  %>    
   
   
  为了在Helloword类中使用ASP的方法,你必须在此类中写一个OnStartPage    
  子函数.如下:    
   
   
  Public   Sub   OnStartPage(PassedScriptingContext   As   ScriptingContext)    
  Set   MyScriptingContext   =   PassedScriptingContext    
  End   Sub    
   
   
   
  现在,无论什么时候用户访问一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的对象请我们使用.这个ScriptingContext包括了全部的ASP方法和属性.实现上,这使得我们有能力访问所有ASP的对象.看下面的代码:    
   
   
  Public   Sub   OnStartPage(PassedScriptingContext   As   ScriptingContext)    
  Set   MyScriptingContext   =   PassedScriptingContext    
  Set   MyApplication   =   MyScriptingContext.Application    
  Set   MyRequest   =   MyScriptingContext.Request    
  Set   MyResponse   =   MyScriptingContext.Response    
  Set   MyServer   =   MyScriptingContext.Server    
  Set   MySession   =   MyScriptingContext.Session    
  End   Sub    
   
   
  以后我们就能用在VB中用MyApplication   来代替ASP中的Application,同理可以代替Request,Server.....,不过我们来是要在   OnStartPage之前来申明这些变量:    
   
   
  Private   MyScriptingContext   As   ScriptingContext    
  Private   MyApplication   As   Application    
  Private   MyRequest   As   Request    
  Private   MyResponse   As   Response    
  Private   MyServer   As   Server    
  Private   MySession   As   Session    
   
   
   
  使用ASP的对象    
  我们的变量现在就能像标准的ASP对象来使用了!比如,我们经常在ASP中用Request.form()来收集提交表单的数据.现在我们在我们的VB中实现这个功能,代码如下:    
   
  用ASP中实现:    
  〈%    
  MyTempVariable   =   Request.Form("userName")    
  Response.Write   ("you   entered   "&   MyTempVariable   &   "as   your   user   name")    
  %>    
   
   
  在VB中实现:    
   
   
  MyTempVariable   =   MyRequest.Form("userName")    
  MyResponse.Write   ("you   entered   "&   MyTempVariable   &   "as   your   user   name")    
   
   
   
  通过使用MyResponse来代替Response,我们能够使用所有Response的方法,当然,MyResponse这个名字可以随便来取,你甚至可以就取Response.    
  另一件我们得注意的是,我们得在我们的建立的类中,写上OnEndPage子函数,这个OnStartPage是相反的!OnStartPage是创建对象,OnEndPage是消毁对象.    
   
   
   
  Public   Sub   OnEndPage()    
  Set   MyScriptingContext   =   Nothing    
  Set   MyApplication   =   Nothing    
  Set   MyRequest   =   Nothing    
  Set   MyResponse   =   Nothing    
  Set   MyServer   =   Nothing    
  Set   MySession   =   Nothing    
  End   Sub    
   
   
   
  SayHello方法    
  我们来建立一个子函数,用于显示"Holle   World".这个SayHello方法只是HelloWorld这个类中一个子函数,我们以后会在ASP中用以下的显示这个方法    
   
   
  〈%    
  Set   ObjReference   =   Server.CreateObject("Example1.HelloWorld")    
  ObjReference.SayHello    
  %>    
   
   
   
  SayHello的程序,很简单的!    
   
  Public   Sub   SayHello()    
  MyResponse.Write   ("Hello   World")    
  End   Sub    
   
  现在一个小型的组件编写完成,剩下的工作就是编译这个组件,在"工程"菜单中保存它,取什么名字都可以,我们用Exmaple1.vbp吧!   然后就用在菜单中选择"make   exmaple1.dll",将其编译成DLL文件.一个组件就真正完成了!    
   
  注意,编译了此组件那么你就得先把你的PWS关掉,然后再编译此组件.否则VB就会告诉你些组件在使用中.    
   
  在ASP中使用我们的自己的组件.    
   
  当你更正了在编译中的错误,成功地编译了example1这个工程,现在你就得拿出你最喜欢的HTML编辑器来写下下面的语句,保存为ASP文件.    
   
   
  〈HTML>    
  〈HEAD>    
  〈TITLE>Example   1〈/TITLE>    
  〈/HEAD>    
   
  〈BODY>    
   
  〈%    
  Set   ObjReference   =   Server.CreateObject("Example1.HelloWorld")    
  ObjReference.SayHello    
  %>    
   
  〈/BODY>    
  〈/HTML>    
   
  运行后即可看到结果:    
   
  Hello   World    
   
  注册组件    
   
  如果你想和你的朋友,邻居分享你的组件,那么你就得在你的系统上注册你的组件.我们一般使用Regsvr32.exe来注册组件.注册后你的组件会出现在Win95/Win98的windows/system目录中.下面是一个注册的例子:    
   
  Regsvr32.exe   C:/wwwroot/Example1/Example1.dll    
   
  在你的系统中,VB会自动给你注册,所以你很少用到Regsvr32.exe    
   
  我们这里只是写了一个非常小的组件,你们可以写好自己的更大的组件,而且还可以用VB中的很多控件.  
  Top

5 楼kiccleaf(凯晰叶子(http://www.openzj.com))回复于 2005-02-02 20:30:14 得分 1

楼上的说得差不多了!!编写和调用都写上去了!Top

6 楼passionke(每一步都改变未来,却只能有一种结局!)回复于 2005-02-02 23:01:20 得分 5

楼主既然:就在vb.net和c#.net中间选学  
  那就直接转.net好了Top

7 楼ruyunluck()回复于 2005-02-03 00:26:05 得分 1

studyTop

8 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2005-02-03 01:03:10 得分 11

http://blog.csdn.net/online/archive/2005/01/01/237102.aspxTop

9 楼look4sword(觅剑 | 劈柴、喂马、周游世界。)回复于 2005-02-03 08:05:38 得分 1

用.net就容易多了.不过也有很多服务器不支持.net.相信慢慢会好的.Top

10 楼dout(航天飞机_瓶子里的鱼儿)回复于 2005-02-03 08:31:58 得分 1

转.netTop

11 楼www_31365_com(Lihoo.org)回复于 2005-02-03 16:26:09 得分 58

今天我们来看一下一个完整的数据封装的、带分页的例子  
   
     
   
  打开vb6,新建Activex   Dll工程。工程名修改为fCom,类名修改为fZ8    
  引用“Microsoft   Active   Server   Pages   Object”,”Microsoft   Activex   Data   Object   2.7   Library”对象库。    
   
     
   
  创建两个组件事件:OnStartPage以及OnEndPage    
  在事件OnStartPage中创建类ScriptingContent的一个引用。    
  实例化类ScriptingContent。  
   
     
   
  代码如下:  
   
  Option   Explicit  
   
     
   
     
   
  '**************************************************  
   
  '作者:龙卷风  
   
  '功能:简单的可以定制的,完全封装的组件  
   
  '时间:2005-01-01  
   
  '**************************************************  
   
     
   
  '对象的声明  
   
  Dim   MyResponse   As   Response  
   
  Dim   MyRequest   As   Request  
   
  Dim   myApplication   As   Application  
   
  Dim   myServer   As   Server  
   
  Dim   mySession   As   Session  
   
     
   
  '私有变量  
   
  Private   mPageSize   As   Long  
   
  Private   mstrSql   As   String  
   
     
   
          '当组件被创建的时候会触发这个事件  
   
  Public   Sub   OnStartPage(myScriptingContent   As   ScriptingContext)  
   
            '进行对象的实例化  
   
            Set   MyResponse   =   myScriptingContent.Response  
   
            Set   MyRequest   =   myScriptingContent.Request  
   
            Set   myServer   =   myScriptingContent.Server  
   
            Set   myApplication   =   myScriptingContent.Application  
   
            Set   mySession   =   myScriptingContent.Session  
   
  End   Sub  
   
     
   
          '当组件被销毁的时候触发这个事件  
   
  Public   Sub   OnEndPage()  
   
            '销毁对象  
   
            Set   MyResponse   =   Nothing  
   
            Set   MyRequest   =   Nothing  
   
            Set   myServer   =   Nothing  
   
            Set   myApplication   =   Nothing  
   
            Set   mySession   =   Nothing  
   
  End   Sub  
   
     
   
  ‘显示Table  
   
  Public   Function   ShowTable()  
   
           
   
          Dim   conn   As   New   ADODB.Connection  
   
          Dim   rs   As   New   ADODB.Recordset  
   
           
   
          Dim   i   As   Integer  
   
          Dim   j   As   Integer  
   
          Dim   intPage   As   Integer  
   
          Dim   intPageCount   As   Integer  
   
          Dim   strScriptName   As   String  
   
          Dim   intPos   As   Integer  
   
          Dim   intFieldCount   As   Integer  
   
           
   
          '得到路径  
   
          strScriptName   =   MyRequest.ServerVariables("Script_Name")  
   
          intPos   =   InStrRev(strScriptName,   "/")  
   
          If   intPos   <>   0   Then  
   
                  strScriptName   =   Mid(strScriptName,   intPos   +   1)  
   
          End   If  
   
           
   
          If   IsEmpty(MyRequest("page"))   Then  
   
                  intPage   =   1  
   
          Else  
   
                  intPage   =   CInt(MyRequest("page"))  
   
          End   If  
   
                 
   
          On   Error   GoTo   err  
   
           
   
          conn.Open   "Provider=SQLOLEDB.1;Persist   Security   Info=False;User   ID=sa;Initial   Catalog=Northwind;Data   Source=localhost"  
   
                   
   
          rs.Open   mstrSql,   conn,   adOpenStatic,   adLockReadOnly  
   
           
   
          '得到记录数  
   
          intFieldCount   =   rs.Fields.Count  
   
           
   
          '输出表格  
   
          MyResponse.Write   "<table   border=1   cellspacing=0   cellpadding=2>"  
   
           
   
          If   Not   rs.EOF   Then  
   
                  rs.PageSize   =   mPageSize  
   
                  rs.AbsolutePage   =   intPage  
   
                   
   
                  '得到页数  
   
                  intPageCount   =   rs.PageCount  
   
                   
   
                  '处理分页  
   
                  If   intPage   <   1   Then   intPage   =   1  
   
                  If   intPage   >   intPageCount   Then   intPage   =   intPageCount  
   
                   
   
                   
   
                  '输出表头  
   
                  MyResponse.Write   "<tr>"  
   
                  For   i   =   0   To   intFieldCount   -   1  
   
                          MyResponse.Write   "<th>"   &   rs(i).Name   &   "</th>"  
   
                  Next  
   
                  MyResponse.Write   "</tr>"  
   
                           
   
                  '输出内容  
   
                  For   i   =   1   To   mPageSize  
   
                          If   rs.EOF   Then  
   
                                    Exit   For  
   
                          End   If  
   
                          MyResponse.Write   "<tr>"  
   
                                  For   j   =   0   To   intFieldCount   -   1  
   
                                          MyResponse.Write   "<td>"   &   rs.Fields(j).Value   &   "</td>"  
   
                                  Next  
   
                          MyResponse.Write   "</tr>"  
   
                          rs.MoveNext  
   
                  Next  
   
                   
   
                  '输出分页  
   
                  MyResponse.Write   "<tr>"  
   
                  If   intPage   <>   1   Then  
   
                  MyResponse.Write   "<a   href="   &   strScriptName   &   "?page=1>[第一页]</a>"  
   
                  MyResponse.Write   "<a   href="   &   strScriptName   &   "?page="   &   intPage   -   1   &   "   >[上一页]</a>"  
   
                  End   If  
   
                   
   
                  If   intPage   <>   intPageCount   Then  
   
                  MyResponse.Write   "<a   href="   &   strScriptName   &   "?page="   &   intPage   +   1   &   ">[下一页]</a>"  
   
                  MyResponse.Write   "<a   href="   &   strScriptName   &   "?page="   &   intPageCount   &   ">[最后一页]</a>"  
   
                  End   If  
   
                   
   
                  MyResponse.Write   "页次:<FONT   COLOR='Red'>"   &   intPage   &   "/   "   &   intPageCount   &   "</FONT>"  
   
                  MyResponse.Write   "</tr>"  
   
                   
   
          End   If  
   
           
   
          MyResponse.Write   "</table>"  
   
                   
   
                   
   
          '释放资源  
   
          If   Not   rs   Is   Nothing   Then  
   
                  If   rs.State   =   1   Then  
   
                          rs.Close  
   
                  End   If  
   
                  Set   rs   =   Nothing  
   
          End   If  
   
           
   
          If   Not   conn   Is   Nothing   Then  
   
                  If   conn.State   =   1   Then  
   
                          conn.Close  
   
                  End   If  
   
                  Set   conn   =   Nothing  
   
          End   If  
   
     
   
          Exit   Function  
   
     
   
  err:  
   
          MyResponse.Write   err.Number   &   err.Description  
   
          If   Not   rs   Is   Nothing   Then  
   
                  If   rs.State   =   1   Then  
   
                          rs.Close  
   
                  End   If  
   
                  Set   rs   =   Nothing  
   
          End   If  
   
           
   
          If   Not   conn   Is   Nothing   Then  
   
                  If   conn.State   =   1   Then  
   
                          conn.Close  
   
                  End   If  
   
                  Set   conn   =   Nothing  
   
          End   If  
   
  End   Function  
   
     
   
  ‘定义属性  
   
  Public   Property   Get   ShowPageSize()   As   Variant  
   
  ShowPageSize   =   mPageSize  
   
  End   Property  
   
     
   
  Public   Property   Let   ShowPageSize(ByVal   vNewValue   As   Variant)  
   
  mPageSize   =   vNewValue  
   
  End   Property  
   
     
   
  Public   Property   Get   strSQL()   As   Variant  
   
  strSQL   =   mstrSql  
   
  End   Property  
   
     
   
  Public   Property   Let   strSQL(ByVal   vNewValue   As   Variant)  
   
  mstrSql   =   vNewValue  
   
  End   Property  
   
     
   
  编译成Dll文件,系统自动会注册。  
   
  否则就手工注册   Regsvr32   f:\test\fcom.dll  
   
     
   
  测试  
   
  打开visual   interdev6.0,生成一个fz8.asp文件  
   
  <%@   Language=VBScript   %>  
   
  <HTML>  
   
  <BODY>  
   
  <%  
   
  dim   obj  
   
  set   obj=server.CreateObject("fcom.fz8")    
   
  ‘每页显示的记录数  
   
  obj.ShowPageSize=10  
   
  ‘显示的sql语句  
   
  obj.strSQL="select   customerid,companyname,contactname,contacttitle,address   from   customers"  
   
  obj.ShowTable()    
   
  %>  
   
  </BODY>  
   
  </HTML>  
  Top

相关问题

  • 求ASP代码封装成DLL技术,抛百分!
  • efsasptodll封装dll后asp调用问题
  • asp封装成dll的问题
  • ASP代码封装DLL问题
  • DLL 封装
  • 我想将一个ASP的CLASS用VB封装成DLL,请问高手要怎么做改?[高分]
  • asp文件怎么用VB封装成DLL文件?
  • ####asp封装成dll的问题,高手请进~~~
  • asp中的代码到底要如何封装成DLL?谢谢
  • 如何将*.asp文件封装成*.dll的问题

关键词

  • .net
  • c#.net
  • vb.net
  • vb6

得分解答快速导航

  • 帖主:qq_428328
  • hackate
  • CnEve
  • bighai78
  • kiccleaf
  • passionke
  • ruyunluck
  • online
  • look4sword
  • dout
  • www_31365_com

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo