加载中...
查看文章
  • 用VB编写ActiveX DLL实现ASP编程
  • 作者:未知 来源:未知 添加时间:2002年12月23日 字体:
  • 83465    ASP是目前一种广为应用的用来快速构建动态WEB站点的编程语言,默认的内置开发语言是VBScript,由于ASP和微软Windows系列操作系统的结合非常的好,使得ASP已经成为了NT开发平台上面进行WEB开发的首选语言和环境。他有着简单易学,方便快速开发的种种优点,但是他也有着致命的弱点,就是他是脚本语言解释执行的,速度会受到一定的影响,更为关键的是,使用ASP来开发完成一个项目之后,整个项目在交付客户使用的时候,是会连带所有的ASP脚本源代码的,也就无法将商业程序保密了,源代码泄漏会给自己造成很大的损失,虽然微软也相应的推出了用来加密ASP程序的软件,但是有着诸多的限制,以及会降低程序运行的速度和二次开发调试的难度,难道ASP做出来的项目就真的要暴露所有的源代码吗?

    Q5gP9[t

    Q5gP9[t  当然了,答案当然是否定的,因为世界上没有绝对不可能的事情,接下来就跟随我Q5gP9[t来看看如何利用VB的ActiveX DLL来实现将ASP程序封装起来吧,也就是我Q5gP9[t们可以使用ActiveX DLL来完成所有ASP能完成的事情,而ActiveX DLL是编译好的DLL文件,别人是无法得知你的源代码的,也就保证的自己的商业机密和核心技术,并且达到同样的效果,使用完全封装的ActiveX DLL会比完全适用ASP脚本语言的执行速度要快很多,尤其是大运算量的时候跟为明显!经过我Q5gP9[t们的具体测试,在操纵10000条数据库记录的时候,封装成为ActiveX DLL的WEB应用程序比纯ASP代码的应用程序,速度上面要快大约21%左右,在目前国内过于缓慢的网络来讲,速度就是一个WEB站点的很关键的一部分。并且采用了ActiveX DLL来开发WEB程序,要比单纯使用ASP好得多,毕竟ASP只能使用VBScript来开发,无法享用VB大量的优点,而ActiveX DLL则可以充分利用VB里面所有的特性。

    Q5gP9[t

    Q5gP9[t  下面我Q5gP9[t们先来看看什么是ActiveX DLL吧。ActiveX是微软提出的广泛应用于Windows系列的一种代码封装技术,提高了程序代码的可重用性,加快了程序项目的开发速度,一般被称为“组件”。在VB6的集成开发环境当中,我Q5gP9[t们可以看到一下几种ActiveX项目:

    Q5gP9[t

    Q5gP9[t  1、ActiveX EXE

    Q5gP9[t

    Q5gP9[t  这是在“过程外”运行的ActiveX/COM服务器组件,也就是说他们运行的过程和初始化组件的客户机代码不同。尽管可以用ASP访问ActiveX EXE,但是不推荐改动IIS元库,该库允许所有的可执行文件由服务器上运行的脚本代码启动。

    Q5gP9[t

    Q5gP9[t  2、ActiveX OCXs

    Q5gP9[t

    Q5gP9[t  这些特殊的组件把主机应用程序显示和操作组件所需的附加支持包含在GUI环境中。还可以把OCX组件放在网页当中。但是,OCX是应用程序界面,不可以使用ASP来创建的。

    Q5gP9[t

    Q5gP9[t  3、ActiveX文档DLL和ActiveX文档EXE

    Q5gP9[t

    Q5gP9[t  Active文档可以在OLE文件箱应用程序中,例如IE或者Office Binder,显示VB表单。但他们在ASP不能应用。

    Q5gP9[t

    Q5gP9[t  4、ActiveX DLLs

    Q5gP9[t

    Q5gP9[t  这些ActiveX/COM组件和初始化组件的客户机在同一个进程中运行。而我Q5gP9[t们要讨论的ActiveX DLL正是整个组件。一般微软的附加组件和其他的一些第三方厂家提供的各种组件都是这种类型的ActiveX DLL,但是并不全是使用VB编写的,同样可以使用VC/JAVA等等语言来开发。

    Q5gP9[t

    Q5gP9[t  探讨完了什么是ActiveX DLL,我Q5gP9[t们开始正式编写我Q5gP9[t们自己的ActiveX DLL,以便来实现ASP中的同样功能,众所周知,ASP内置了Response、Request、Server、Session、Application五个对象,其实这五个内置对象正是IIS控制台初始化的五个ActiveX DLL组件,既然IIS可以初始化这五个组件用于ASP中,我Q5gP9[t们当然也可以直接在我Q5gP9[t们的ActiveX DLL中引用这些组件来实现我Q5gP9[t们的编程,也就是说我Q5gP9[t们可以在VB应用程序中通过引用这些组件来实现访问ASP内置对象的功能。

    Q5gP9[t

    Q5gP9[t  只要你安装了PWS4或者IIS4以上的WEB服务器,你就拥有了一个名称叫做“Microsoft Active Server Pages Object”的对象库,我Q5gP9[t们可以在VB的ActiveX DLL应用中引用这个对象库,通过引用这个对象库,我Q5gP9[t们就获得了一个对象(类):ScriptingContext,这个对象也正是我Q5gP9[t们整个文章探讨的核心对象。对象库内的关系如下:

    Q5gP9[t

    Q5gP9[t  对象库      类        类成员

    Q5gP9[t

    Q5gP9[t  ASPTypeLibrary ScriptingContext Application

    Q5gP9[t

    Q5gP9[t                    Request

    Q5gP9[t

    Q5gP9[t                    Response

    Q5gP9[t

    Q5gP9[t                    Session

    Q5gP9[t

    Q5gP9[t                    Server

    Q5gP9[t

    Q5gP9[t  通过上面的关系图,我Q5gP9[t们就可以很容易理解类ScriptingContent。下面我Q5gP9[t们来看一个具体的例子吧:

    Q5gP9[t

    Q5gP9[t  1、 使用VB6创建一个新的ActiveX DLL项目

    Q5gP9[t

    Q5gP9[t  2、 引用“Microsoft Active Server Pages Object”对象库。

    Q5gP9[t

    Q5gP9[t  3、 创建两个组件事件:OnStartPage以及OnEndPage

    Q5gP9[t

    Q5gP9[t  4、 在事件OnStartPage中创建类ScriptingContent的一个引用。

    Q5gP9[t

    Q5gP9[t  5、 实例化类ScriptingContent。

    Q5gP9[t

    Q5gP9[t  Test.cls (类实现)

    Q5gP9[t

    Q5gP9[t  ''对象的声明

    Q5gP9[t

    Q5gP9[t  Dim rp as Response

    Q5gP9[t

    Q5gP9[t  Dim rq as Request

    Q5gP9[t

    Q5gP9[t  Dim ap as Application

    Q5gP9[t

    Q5gP9[t  Dim sr as Server

    Q5gP9[t

    Q5gP9[t  Dim sn as Session

    Q5gP9[t

    Q5gP9[t  ''当组件被创建的时候会触发这个事件

    Q5gP9[t

    Q5gP9[t  Public Sub OnStartPage(mysc as ScriptingContent)

    Q5gP9[t

    Q5gP9[t   ''进行对象的实例化

    Q5gP9[t

    Q5gP9[t   set rp=mysc.Response

    Q5gP9[t

    Q5gP9[t   set rq=mysc.Request

    Q5gP9[t

    Q5gP9[t   set sr=mysc.Server

    Q5gP9[t

    Q5gP9[t   set ap=mysc.Application

    Q5gP9[t

    Q5gP9[t   set sn=mysc.Session

    Q5gP9[t

    Q5gP9[t   rp.write "
    Q5gP9[tActiveX DLL组件已经被创建了!
    Q5gP9[t"

    Q5gP9[t

    Q5gP9[t  End Sub

    Q5gP9[t

    Q5gP9[t  ''当组件被销毁的时候触发这个事件

    Q5gP9[t

    Q5gP9[t  Public Sub OnEndPage()

    Q5gP9[t

    Q5gP9[t   Rp.write "
    Q5gP9[tActiveX DLL组件已经被销毁!
    Q5gP9[t"

    Q5gP9[t

    Q5gP9[t   ''销毁对象

    Q5gP9[t

    Q5gP9[t   Set rp=nothing

    Q5gP9[t

    Q5gP9[t   Set rq=nothing

    Q5gP9[t

    Q5gP9[t   Set sr=nothing

    Q5gP9[t

    Q5gP9[t   Set ap=nothing

    Q5gP9[t

    Q5gP9[t   Set sn=nothing

    Q5gP9[t

    Q5gP9[t  End Sub

    Q5gP9[t

    Q5gP9[t  ''定义我Q5gP9[t们自己的一个组件方法

    Q5gP9[t

    Q5gP9[t  Public Sub HelloWorld()

    Q5gP9[t

    Q5gP9[t   Rp.write "<H1>Hello,World!</H1>"

    Q5gP9[t

    Q5gP9[t  End Sub

    Q5gP9[t

    Q5gP9[t  这样,我Q5gP9[t们就创建可以访问ASP内置对象的ActiveX DLL了。我Q5gP9[t们命名这个组件项目为first,在VB中间编译这项目成为一个DLL文件first.dll,并且我Q5gP9[t们在系统中注册这个DLL文件。接下来,我Q5gP9[t们需要一个简单的几乎没有什么代码的ASP程序来调用这个组件:

    Q5gP9[t

    Q5gP9[t  test.asp

    Q5gP9[t

    Q5gP9[t  <html>

    Q5gP9[t

    Q5gP9[t   <head>

    Q5gP9[t

    Q5gP9[t    <title>测试ActiveX DLL</title>

    Q5gP9[t

    Q5gP9[t   </head>

    Q5gP9[t

    Q5gP9[t   <body>

    Q5gP9[t

    Q5gP9[t  <%

    Q5gP9[t

    Q5gP9[t  Dim testme

    Q5gP9[t

    Q5gP9[t  ''创建我Q5gP9[t们刚才编译成功的组件,一旦创建这个组件,同时会在叶面输出文字“ActiveX DLL组件已经被

    Q5gP9[t

    Q5gP9[t  ''创建了!”

    Q5gP9[t

    Q5gP9[t  set testme=server.createobject("first.test")

    Q5gP9[t

    Q5gP9[t  ''调用组件的方法

    Q5gP9[t

    Q5gP9[t  testme.HelloWorld

    Q5gP9[t

    Q5gP9[t  ''注销组件,在注销的同时,会自动在叶面显示“ActiveX DLL组件已经被销毁!”

    Q5gP9[t

    Q5gP9[t  set testme=nothing

    Q5gP9[t

    Q5gP9[t  %>

    Q5gP9[t

    Q5gP9[t   </body>

    Q5gP9[t

    Q5gP9[t  </html>

    Q5gP9[t

    Q5gP9[t  通过上面简单的例子,我Q5gP9[t们可以看到使用ActiveX DLL同样可以实现和ASP同样的功能,并且带来的代码保密和程序运行更加高效的优点。ActiveX DLL和纯ASP有着各自的优点和缺点,只要我Q5gP9[t们合理的运用这两种技术,比如适当的将商业逻辑封装在ActiveX DLL中,或者在需要保密的地方使用DLL封装技术,一定可以编写出高效快速的WEB应用程序。83462
  • 返回页面顶端
  • 上一篇:披著羊皮的大野狼 - Session
  • 下一篇:开辟一条自由ASP快车道
  • 返回上一页 打印本文 加入收藏
  • 页面最后更新时间:2011年5月18日