首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
ASP | ASP.NET | JSP | PHP | AJAX | XML | Java script | HTML/CSS | 服务器类
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> WEB开发 >> asp学习教程 >> 正文
如何在ASP代码中调用VB组件的方法
ChinaItLab  2004-8-14  保存本文    收藏本站


  本篇文章通过与传统的设计方法相比较,介绍了如何在ASP代码中调用VB组件的方法。在本篇文章中,我们假设读者具有VB和ASP的相关入门知识。
  
  服务器端组件和客户端组件的比较
  
  服务器端组件和客户端组件有许多不同之处。服务器端组件是在计算机服务器上注册的DLL文件,客户端组件则在浏览器运行的计算机上注册,在IE中,这些客户端组件被称作ActiveX浏览器插件组件。
  
  ActiveX客户端组件可以使用VB编写,并通过互联网或内联网发送给浏览器,生成很精彩的效果。问题是,ActiveX客户端组件只限于IE,而使用VB编写的服务器端组件则能够产生纯HTML代码,适用于所有的浏览器。服务器端组件的最大问题是该组件必须在Windows+IIS环境中或与IIS的API兼容的应用中运行。相比较而言,在服务器端实现这种兼容性似乎更容易一些。
  
  IIS服务器端组件驻留在与IIS相同的内存空间中,并随时准备服务器上处理的ASP网页的调用。从理论上说,我们可以在返回浏览器的ASP代码中插入任何文本或代码,但一般来说,大多数服务器端组件被用来处理需要大量时间的计算或数据库信息查找,然后将所得到的结果以HTML代码的形势返回给浏览器。
  
  VB组件的解析
  
  由于本篇文章旨在讨论编写VB组件的基本方法,因此在能够说明问题的情况下,其中的例子将是十分简单的。在详细讨论编写VB组件之前,我们将首先从概念上对VB组件作一番剖析。
  
  在使用VB编写服务器端的组件时,有三个分层次的概念(在VB和ASP代码中都会用到)需要注意:
  
  ·Project名字
  
  ·Class名字
  
  ·Method名字
  
  VB工程的名字就是Project名字。许多开发人员都将Project名字看作是组件名字,但VB只将它看作是工程的名字。在我们的例子中,Project名字是ExampleProject,当然了,我们可以随意命名自己的工程名字;Class名字名字是ExampleClass,Method名字是ExampleMethod。
  
  工程名字(组件名字)也可以是由组件代码编译后得到的DLL文件的名字,该DLL文件将包含有被IIS用来向浏览器返回文本或HTML代码的经过编译的VB代码。
  
  方法名字指的是管理特定代码功能的VB代码部分,例如计算日期或显示数据库中所有作者的清单。组件方法有点角个黑盒子,它完成特定的工作或根据输入的信息返回特定的信息。一般情况下,在一个组件中可以有多个方法。为了更有效地管理组件的方法,可以将方法按照相似的分类组合在一起,这就是组件类的作用。
  
  组件类能够在内存中生成组件类代码的一个拷贝,在使用ASP代码创建对象时,它也被称作对象,这就是实例化。一旦有了组件类代码实例的对象引用,我们就可以从ASP代码中调用类中包含的方法。
  
  在我们的例子中,工程、类、方法的名字将用来在ASP代码中实例化VB组件,并以方法参数的形式从ASP代码中向VB代码传送值,在ASP代码中接收从VB方法中返回的值。
  
  从ASP文件中调用VB组件
  
  我们用来调用VB组件的ASP文件将使用对象变量保存VB对象的引用。在ASP文件中,可以使用ASP Server对象的CreateObject()方法创建一个对象,该方法将返回一个它创建的对象的引用。在例子中,我们将使用objReference作为组件的对象变量。下面的代码显示ASP代码在实例化VB组件时需要使用组件的工程名和类名(ExampleProject和ExampleClass)。
  
  实例化VB组件的ASP代码:
  
  Set objReference = Server.CreateObject("ExampleProject.ExampleClass") 
  
  
  VB组件将从ASP代码中接受3个变量的值,并向ASP代码返回一个值,该值将存储在名字为strMethodReturn的ASP变量中。下面的代码显示出ASP代码是如何得到由VB组件返回的值的,它向VB方法传送三个名字分别为Param1、Param2和Parma3的三个参数值:
  
  strMethodReturn = objReference.ExampleMethod(Param1, Param2, Param3)
  
  Param1、Param2、Param3这三个参数必须与VB组件中方法的定义完全相同,下面是二行实例化VB组件的类、并调用类的方法获得返回值的ASP代码的例子:
  
  Set objReference = Server.CreateObject("ExampleProject.ExampleClass")
  strMethodReturn = objReference.ExampleMethod(Param1, Param2, Param3)
  
  下面的图表直观地显示了VB组件的工程、类和方法名字是如何与ASP文件中的组件实例化代码协调的。在逐步地学习如何编写例子中的VB代码和ASP文件时,可以将下面的图表作为参考。
  
 

  VB方法的作用
  
  我们例子中简单的VB组件将获得用户的名字和年龄,然后返回一个以天计的用户的年龄,而且有一个可选项,能够提醒某个用户是否已经超过了45岁。
  
  如果我们向组件传送一个虚构的Eric Clapton作为方法的第一个参数值,将第二个参数设置为56,我们将得到下面的返回字符串:
  
  Eric Clapton is over 20440 days old.
  
  如果我们将可选的第三个参数设置为True(这一参数将使方法判断用户是否已经超过45岁),我们将会得到下面的返回字符串:
  
  Eric Clapton is over 20440 days OLD.
  
  由于使用了三个完全不同的变量━━用户的姓名、年龄以及表示他们是否超过了45岁,因此我们需要使用三个方法参数将这些信息从ASP文件传送给VB代码。在VB中,考虑要使用哪些数据类型是十分重要的。我们将使用一个名字为strName的字符串型变量表示用户的姓名,名字为intAge的整型变量表示用户的年龄,名字为blnAgeEmphasisOn的布尔型变量表明用户是否已经超过了45岁。
  
  三个方法参数(传送给VB组件的方法代码的变量):
  

  在VB中创建服务器端组件
  
  启动VB后,在“新工程”窗口中双击“ActiveX DLL”图标。一旦VB加载了新的ActiveX DLL工程,至少会看到二个打开的窗口:工程窗口和属性窗口。如果有一个窗口显示不出来,可以从VB的菜单中选择“查看”菜单项(分别使用“查看”->“工程管理器”、“查看”->“属性窗口”)。
  
  由于VB对第一个工程和类的缺省命名分别是Project1、Class1,我们可以将它们分别改为ExampleProject 和ExampleClass。工程名字的修改可以在工程窗口中进行。在工程窗口中新输入的工程名字左侧有一个带有+或-的小方框。如果显示的是+号,选择该小方框,+号就会变成-号,缺省的类名(Class1)就会显示在工程名字的下面。在工程窗口中选择缺省的类名,在属性窗口中将缺省的类名修改为ExampleClass。
  
  在保存工程时,VB会将包含类的代码保存在一个扩展名为CLS的文件,工程文件的扩展名为VBP,其中存储有工程的各种设置、文件名和文件存储的位置。
  
  服务器端组件的属性值
  
  在属性窗口中显示ExampleClass类的属性,注意Instancing属性的值为“5 MultiUse”,如果将工程的类型设置为标准的EXE工程,该属性的值就会随之发生改变。
  
  在VB的菜单中选择“工程”->“ExampleProject属性”,就会显示出工程属性窗口。在“常规”标签的右下端的“线程模式”属性的值应当被设置为“单元线程”,这将使多个访问者能够同时使用我们的组件类的不同的实例。另外,选择“无人值守执行”和“驻留内存”二个选项,避免VB6中的内存泄露问题。
  
  VB方法的代码
  
  现在我们就需要使用VB的代码窗口来输入VB代码了。如果代码窗口还是一片空白,那就输入下面的代码好了:
  
  Option Explicit
   '它将要求我们必须定义所有的变量。
   
   Public Function ExampleMethod(ByVal strName As String, _
              ByVal intAge As Integer, _
         Optional ByVal blnAgeEmphasisOn As Boolean = False) As String
  
  在上面的代码中,我们将方法定义成了一个Public函数,这意味着该组件之外的任何代码都能够调用它,由于是一个函数,它还会向调用它的代码返回一个值。
  
  Public Function ExampleMethod() As String 
  
  
  上面的代码表示ExampleMethod()函数将向它的调用者返回一个字符串类型的值。
  
  我们的VB方法带有3个从ASP代码接受值的参数变量,最后一个参数变量是可选的。所有用来从VB组件之外接收值的参数变量都需要在VB方法的括号间定义和使用,我们可以象在方法内定义的变量那样使用以这种方式定义为方法参数的变量,二者之间唯一的区别是外面的ASP代码来决定它们的值。
  
  下面是三个变量和它们的数据类型:
  
  
     ByVal strName As String
      ByVal intAge As Integer
   Optional ByVal blnAgeEmphasisOn As Boolean = False
  
  上面的代码定义了三个方法参数的数据类型,指明它们是按值传送的,而且第三个参数是可选的,如果没有第三个参数,则其缺省值为False。
  
  然后,我们将在方法的定义中添加一些必要的逗号、空格和底划线(_),这样才能符合VB的语法要求。我们将把参数列表放在方法定义的括号中间,得到的方法定义如下:
  
  Public Function ExampleMethod(ByVal strName As String, _
               ByVal intAge As Integer, _
          Optional ByVal blnAgeEmphasisOn As Boolean = False) As
中国IT教育热线咨询
相关文章
使用AJAX技术构建更优秀的Web应用程序
ASP应用程序设计的Web状态管理分析
Ajax驱动的Web站点
如何使用Ajax开发Web应用程序
XMLHttpRequest和AJAX虎视Web应用开发
最新文章
·PHP正则表达式从url中取得域名
·php设计模式介绍之迭代器模式
·简单学习php遇到的主要问题
·asp根据表单自动生成sql语句的函
·雅虎选项卡特效
 文章评论

 精彩友情推荐
·Asp源码 PHP源码
·CGI源码 JSP源码
·建站书籍教程
·服务器软件 .net源码
·建站工具软件
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
ASP.NET ASP PHP JSP
·extjs ComboBox联动下拉菜单示例08-01
·漫谈.Net开发关于命名空间和目录划分07-31
·在Silverlight应用程序中操作Cookie07-28
·带附加条件的NewID()用法(downmoon)07-28
·对自定义路由进行单元测试07-28
·javascript实现yield07-28
·在ASP.NET中使用Google Maps07-28
·Sql Server2005 实现Oracle10g的hash表分区功07-28
·asp.net get set用法07-26
·Asp.net 控件开发—数据回传07-26
·接口vs. 的实体类07-26
·php设计模式介绍之迭代器模式08-02
·简单学习php遇到的主要问题08-02
·asp根据表单自动生成sql语句的函数08-02
·教你优化你的ASP程序03-07
·asp去除HTML标记的三个实用函数03-07
·ASP添加验证码的解决方法03-07
·ASP通用文章分页函数:非记录集分页03-07
·ASP教程基础:十天学会ASP第三天03-07
·ASP教程基础:十天学会ASP第二天03-07
·ASP教程基础:十天学会ASP第一天03-07
·能够生成google xml地图的asp源码03-06
·Linux系统下让PHP提高性能的工具APC05-06
·一个完整、安全的PHP用户登录系统11-14
·Apache+PHP+MySQL建立数据库驱动的动态网站08-24
·用SSH与PHP相连接 确保数据传输的安全性08-23
·PHP5手动最简安装方法08-03
·PHP程序加速探索之服务器负载测试07-11
·完全讲解PHP+MySQL的分页显示示例分析05-30
·用Suhosin加强PHP脚本语言安全性05-26
·初学入门 PHP 和 MySQL05-17
·传奇的诞生 PHP三位创始人简介05-10
·大型系统上PHP令人不爽的九大原因05-10
·ASP.NET和PHP、JSP究竟学哪个?07-30
·JAVA (Jsp)利用Google的Translate开发API07-29
·由Servlet获得FacesContext及ManagedBeans07-24
·用JOTM向Servlet中添加事务07-18
·用servlet生成验证码07-16
·JSP/Servlet伪静态网页实现07-08
·JSP和Servlet的关系浅谈06-15
·妙用异步Servlet扩展AJAX应用程序06-11
·servlet生成验证码图片06-02
·java.servlet.Filter的应用05-30
·Java程序员必看--扩展鼠标右键菜单功能05-13
  培训中心
人才交流中心 技术交流中心
  ITLab技术交流平台: