用VB编写ActiveX DLL实现ASP编程

发布时间:2007年06月04日      浏览次数:2335 次
---------------------------------------------------------------------------------
用VB编写ActiveX DLL实现ASP编程(一).txt
---------------------------------------------------------------------------------
 ASP是目前一种广为应用的用来快速构建动态WEB站点的编程语言,默认的内置开发语言是VBScript,由于ASP和微软Windows系列操作系统的结合非常的好,使得ASP已经成为了NT开发平台上面进行WEB开发的首选语言和环境。他有着简单易学,方便快速开发的种种优点,但是他也有着致命的弱点,就是他是脚本语言解释执行的,速度会受到一定的影响,更为关键的是,使用ASP来开发完成一个项目之后,整个项目在交付客户使用的时候,是会连带所有的ASP脚本源代码的,也就无法将商业程序保密了,源代码泄漏会给自己造成很大的损失,虽然微软也相应的推出了用来加密ASP程序的软件,但是有着诸多的限制,以及会降低程序运行的速度和二次开发调试的难度,难道ASP做出来的项目就真的要暴露所有的源代码吗?
  当然了,答案当然是否定的,因为世界上没有绝对不可能的事情,接下来就跟随我来看看如何利用VB的ActiveX DLL来实现将ASP程序封装起来吧,也就是我们可以使用ActiveX DLL来完成所有ASP能完成的事情,而ActiveX DLL是编译好的DLL文件,别人是无法得知你的源代码的,也就保证的自己的商业机密和核心技术,并且达到同样的效果,使用完全封装的ActiveX DLL会比完全适用ASP脚本语言的执行速度要快很多,尤其是大运算量的时候跟为明显!经过我们的具体测试,在操纵10000条数据库记录的时候,封装成为ActiveX DLL的WEB应用程序比纯ASP代码的应用程序,速度上面要快大约21%左右,在目前国内过于缓慢的网络来讲,速度就是一个WEB站点的很关键的一部分。并且采用了ActiveX DLL来开发WEB程序,要比单纯使用ASP好得多,毕竟ASP只能使用VBScript来开发,无法享用VB大量的优点,而ActiveX DLL则可以充分利用VB里面所有的特性。
  下面我们先来看看什么是ActiveX DLL吧。ActiveX是微软提出的广泛应用于Windows系列的一种代码封装技术,提高了程序代码的可重用性,加快了程序项目的开发速度,一般被称为“组件”。在VB6的集成开发环境当中,我们可以看到一下几种ActiveX项目:
  1、ActiveX EXE
  这是在“过程外”运行的ActiveX/COM服务器组件,也就是说他们运行的过程和初始化组件的客户机代码不同。尽管可以用ASP访问ActiveX EXE,但是不推荐改动IIS元库,该库允许所有的可执行文件由服务器上运行的脚本代码启动。
  2、ActiveX OCXs
  这些特殊的组件把主机应用程序显示和操作组件所需的附加支持包含在GUI环境中。还可以把OCX组件放在网页当中。但是,OCX是应用程序界面,不可以使用ASP来创建的。
  3、ActiveX文档DLL和ActiveX文档EXE
  Active文档可以在OLE文件箱应用程序中,例如IE或者Office Binder,显示VB表单。但他们在ASP不能应用。
  4、ActiveX DLLs
  这些ActiveX/COM组件和初始化组件的客户机在同一个进程中运行。而我们要讨论的ActiveX DLL正是整个组件。一般微软的附加组件和其他的一些第三方厂家提供的各种组件都是这种类型的ActiveX DLL,但是并不全是使用VB编写的,同样可以使用VC/JAVA等等语言来开发。
  探讨完了什么是ActiveX DLL,我们开始正式编写我们自己的ActiveX DLL,以便来实现ASP中的同样功能,众所周知,ASP内置了Response、Request、Server、Session、Application五个对象,其实这五个内置对象正是IIS控制台初始化的五个ActiveX DLL组件,既然IIS可以初始化这五个组件用于ASP中,我们当然也可以直接在我们的ActiveX DLL中引用这些组件来实现我们的编程,也就是说我们可以在VB应用程序中通过引用这些组件来实现访问ASP内置对象的功能。
  只要你安装了PWS4或者IIS4以上的WEB服务器,你就拥有了一个名称叫做“Microsoft Active Server Pages Object”的对象库,我们可以在VB的ActiveX DLL应用中引用这个对象库,通过引用这个对象库,我们就获得了一个对象(类):ScriptingContext,这个对象也正是我们整个文章探讨的核心对象。对象库内的关系如下:
  对象库      类        类成员
  ASPTypeLibrary ScriptingContext Application
                    Request
                    Response
                    Session
                    Server
  通过上面的关系图,我们就可以很容易理解类ScriptingContent。下面我们来看一个具体的例子吧:
  1、 使用VB6创建一个新的ActiveX DLL项目
  2、 引用“Microsoft Active Server Pages Object”对象库。
  3、 创建两个组件事件:OnStartPage以及OnEndPage
  4、 在事件OnStartPage中创建类ScriptingContent的一个引用。
  5、 实例化类ScriptingContent。
  Test.cls (类实现)
  ''对象的声明
  Dim rp as Response
  Dim rq as Request
  Dim ap as Application
  Dim sr as Server
  Dim sn as Session
  ''当组件被创建的时候会触发这个事件
  Public Sub OnStartPage(mysc as ScriptingContent)
   ''进行对象的实例化
   set rp=mysc.Response
   set rq=mysc.Request
   set sr=mysc.Server
   set ap=mysc.Application
   set sn=mysc.Session
   rp.write "<br>ActiveX DLL组件已经被创建了!<br>"
  End Sub
  ''当组件被销毁的时候触发这个事件
  Public Sub OnEndPage()
   Rp.write "<br>ActiveX DLL组件已经被销毁!<br>"
   ''销毁对象
   Set rp=nothing
   Set rq=nothing
   Set sr=nothing
   Set ap=nothing
   Set sn=nothing
  End Sub
  ''定义我们自己的一个组件方法
  Public Sub HelloWorld()
   Rp.write "<H1>Hello,World!</H1>"
  End Sub
  这样,我们就创建可以访问ASP内置对象的ActiveX DLL了。我们命名这个组件项目为first,在VB中间编译这项目成为一个DLL文件first.dll,并且我们在系统中注册这个DLL文件。接下来,我们需要一个简单的几乎没有什么代码的ASP程序来调用这个组件:
  test.asp
  <html>
   <head>
    <title>测试ActiveX DLL</title>
   </head>
   <body>
  <%
  Dim testme
  ''创建我们刚才编译成功的组件,一旦创建这个组件,同时会在叶面输出文字“ActiveX DLL组件已经被
  ''创建了!”
  set testme=server.createobject("first.test")
  ''调用组件的方法
  testme.HelloWorld
  ''注销组件,在注销的同时,会自动在叶面显示“ActiveX DLL组件已经被销毁!”
  set testme=nothing
  %>
   </body>
  </html>
  通过上面简单的例子,我们可以看到使用ActiveX DLL同样可以实现和ASP同样的功能,并且带来的代码保密和程序运行更加高效的优点。ActiveX DLL和纯ASP有着各自的优点和缺点,只要我们合理的运用这两种技术,比如适当的将商业逻辑封装在ActiveX DLL中,或者在需要保密的地方使用DLL封装技术,一定可以编写出高效快速的WEB应用程序。
---------------------------------------------------------------------------------
用VB编写ActiveX DLL实现ASP编程(二).txt
---------------------------------------------------------------------------------
首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依*HTML来起作用.而且只能在IE上有用.但是服 务器端的组件是运行在服务器端,它在服务器上执行各种操作.因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器.
当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到〈%%>标签之间的代码,并且执行它(也可以是〈scri ptrunat=server>〈/script>之间的代码).如果这个ASP程序在先前被调用过,那么它就会用 内存中的编译过的程序来向用户返回HTML代码,如果没有,那么它就重新编译.这里ASP就比CGI多一点速度优势,因为CGI 是每一个请求都使用一个线程.这样就大大消耗了服务器的资源.
想不想你写的程序自己就能在IIS运行!?!现在你就行了!使用VB5(当然现在是VB6了),你就能建立DynamicLin kedLibraries(DLL文件),它能在IIS上直接运行(如果有asp文件来请求的话).
系统和软件的要求
你需要一个32位的操作系统来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows95+PWS+VB 5的环境下开发的.
我们开始吧
启动你的VB,选择ActiveX图标.这个图标可以在新建工程找到!VB会提供一个默认的工程名(project1)和类名( class1).我们会将这两个名字都改掉.在改名之前,请首先确认我们拥有MicrosoftActiveServerPag esObjectLibrary,它在我们的程序非常有用.从菜单中选择工程,然后在其中选择引用,就会出现引用窗 口
从中选择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(PassedScriptingContextAsScriptingContex t)
SetMyScriptingContext=PassedScriptingContext
EndSub
现在,无论什么时候用户访问一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的对象请我们 使用.这个ScriptingContext包括了全部的ASP方法和属性.实现上,这使得我们有能力访问所有ASP的对象.看 下面的代码:
PublicSubOnStartPage(PassedScriptingContextAsScriptingContex t)
SetMyScriptingContext=PassedScriptingContext
SetMyApplication=MyScriptingContext.Application
SetMyRequest=MyScriptingContext.Request
SetMyResponse=MyScriptingContext.Response
SetMyServer=MyScriptingContext.Server
SetMySession=MyScriptingContext.Session
EndSub
以后我们就能用在VB中用MyApplication来代替ASP中的Application,同理可以代替Request,S erver.....,不过我们来是要在OnStartPage之前来申明这些变量:
PrivateMyScriptingContextAsScriptingContext
PrivateMyApplicationAsApplication
PrivateMyRequestAsRequest
PrivateMyResponseAsResponse
PrivateMyServerAsServer
PrivateMySessionAsSession
使用ASP的对象
我们的变量现在就能像标准的ASP对象来使用了!比如,我们经常在ASP中用Request.form()来收集提交表单的数据 .现在我们在我们的VB中实现这个功能,代码如下:
用ASP中实现:
〈%
MyTempVariable=Request.Form(userName)
Response.Write(youentered&MyTempVariable&asyourus ername)
%>
在VB中实现:
MyTempVariable=MyRequest.Form(userName)
My Response.Write(youentered&MyTempVariable&asyourus ername)
通过使用MyResponse来代替Response,我们能够使用所有Response的方法,当然,MyResponse这 个名字可以随便来取,你甚至可以就取Response.
另一件我们得注意的是,我们得在我们的建立的类中,写上OnEndPage子函数,这个OnStartPage是相反的!OnS tartPage是创建对象,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
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!