如何用VB6写COM组件(转)

   所幸的是,我们可以用COM组件来在最大程度上扩展ASP的功能。你可知道,任何可以用诸如VB,VC和VJ以及其它的一些程序语言所写出来的东西,都可以被应用到你的网站的开发中去,这就是COM(组件对象模型)。COM能够用来编写能够被ASP所调用的对象。当在VB等编程环境中完成了组件的编制后,就可以放在ASP页面中被ASP所调用了。在这篇文章中,我们将看到如何使用VB6来编写一个COM对象,如何将其注册在服务器上,并在ASP页面中对其进行调用。但在开始之前,让我先来简单的介绍一写关于COM的小知识。

   COM对象通常表现为一个.dll文件,是一个编译好了的可执行程序。这意味着COM的运行速度要比纯ASP代码要快的多。在调用COM对象之前,必须在运行IIS服务器的机器上对其进行注册,而且不能通过ASP代码来注册COM组件,这也就是说你必须有对服务器的使用权限。

   现在来看一看我们要实现的任务:我们需要创建一个组件,当你对它传递一个年份的时候,它能够告诉你这一年是否为闰年。当然,这个任务可以用VBScript来实现的。这儿是用这个简单的例子,只是为了程序的简便起见,从而能够把更多的注意力放在如何创建组件以及如何同ASP进行交互上面。实际上如同上面所说的那样,你可以使用VB的任何功能来创建这个组件。

   首先要做的当然是编写ActiveX dll组建,至于到底如何在ASP中调用它,我们会在后面提及。打开Visual Basic,一个对话框会提示你选择一种新建工程类型,在这儿当然选择“ActiveX DLL”。

   如果工程浏览器没有被打开,可以通过选择菜单栏上面的“视图|工程浏览器”来打开它。如果属性窗口也没有打开,同样的方法,可以打开属性窗口。

   现在在工程浏览器中点击Project1,然后可以在属性窗口中看到工程的name 属性为Project1,把它改为CheckYear。当然如果你很懒的话,你也可保留这些缺省的设置,只需在后边在ASP中调用它的时候,也使用相应的工程名和类名就好了。

   现在在工程中,已经预建了一个缺省的类,你可以按你自己的喜好来重新对其命名。在这儿把类命名为LeapYear。

   在类中填写入如下的代码:

   Option Explicit

   '用来判断一个年份是否为闰年的函数

   Public Function IsLeapYear(yr As Variant) As Boolean

   '如果年份能够被4整除并且不能被100整除,或者能够被400整除

   '那么它就是闰年

   If (yr Mod 4 = 0 And yr Mod 100 < > 0) Or yr Mod 400 = 0 Then

   IsLeapYear = True

   Else

   IsLeapYear = False

   End If

   End Function

   上面就是所需要的全部代码了,其实很简单。下面所要做的,就是把它编译成一个dll文件。在“文件”菜单中选择“建立CheckYear.dll...”,再选择要文件要保存的路径。一般的,可以在在服务器上的InetPub目录下面建一个Server Components目录,专门用来存放所有用于ASP中的组件。但这不是必须的,无论你把dll文件保存在什么地方,在编译的过程中,编译程序都会自动的在系统中对组件进行注册。
如果你的VB和WEB服务器不是在一台电脑上,那么在把dll文件拷贝到服务器上后,如果要让组件能够被使用,就必须手工对其进行注册。

   首先你需要把.dll文件从你开发它的机器上,发送到你的服务器上。一般在www服务器上可以为所有的为ASP写的组件建立一个目录,把那个.dll文件拷贝到那个目录中。比如在InetPUB下建立一个Server Components目录。在完成拷贝后,就可以运行Regsvr32.exe来注册这个组件了。在“开始”菜单中选这“运行”,然后在“运行”对话框中输入regsvr32 和要注册的组件的名称和其完整路径。例如:

   Regsvr32 "C:InetPubServer ComponentsMyComponent.dll"

   就这么简单,在注册成功之后,你会得到一个成功注册的信息。然后,你就可以在ASP页面中引用这个COM对象了。当然,要完成这些你需要有服务器的访问权限,你可以直接在服务器上注册或者通过诸如pcAnywhere之类的软件实现远程注册。

   然后,我们就可以在ASP中调用这个组件了。建立一个ASP页面,并添入下面的代码:

   < % Option Explicit

   Dim oCheckYear

   Dim IsLeapYear

   Dim Year

   Year = 1900 '用来检测组件的年份

   '建立一个对刚才那个组件的引用

   Set oCheckYear = CreateObject("CheckYear.LeapYear")

  '调用组件中的IsLeapYear函数,并报存结果

   IsLeapYear = oCheckYear.IsLeapYear(Year)

   '清除对组件的引用,好的编程习惯

   Set oCheckYear = Nothing

   % >

   < HTML >

   < HEAD >

   < TITLE >例子< /TITLE >

   < /HEAD >

   < BODY >

   < %

   '打印输出

   If IsLeapYear = True Then

   Response.Write "< P >< b >" & Year & "< /b >是闰年< /P >"

   Else

   Response.Write "< P >< b >" & Year & "< /b >不是是闰年< /P >"

   End If

   % >

   < /BODY >

   < /HTML >

   代码很简单,唯一需要解释的,就是在ASP中如何建立对自建对象的引用。它的语法是:CreateObject("Projectname.Classname")。你应该还记得吧,在前面我们把工程命名为CheckYear而把类命名为LeapYear,因而在这儿的语句就是:CreateObject("CheckYear.LeapYear")。一旦你建立了对对象的引用,你就可以在ASP页面中访问其所有的公有元素了。剩下的,就如同调用其它任何ASP内置对象一样简单了。

时间: 2024-10-02 18:12:01

如何用VB6写COM组件(转)的相关文章

如何用C#写代码批量下载网页上提供的附件。

问题描述 如何用C#写代码批量下载网页上提供的附件. 在一个网页上有一个导出PDF文件的功能,是当点击这个按钮后,执行一个脚本,然后弹出文件下载另存为的对话框进文件的下载功能. 现在希望用C#实现自动批量的下载并保存这些PDF文件. 求实现方法,谢谢! 解决方案 用webclient.downloadfile或者httpwebrequest去下载. 解决方案二: 建议压缩成ZIP包后再下载. 解决方案三: 执行的是一个脚本,现在我可以实现通过代码模拟这个单击操作,执行这个脚本,但是如何能得到下载

如何用word写一个中文邮件?

  如何用word写一个中文邮件? 1.打开word. 2.点击邮件界面. 3.点击收件人,如果你没有注册过,那么请略过这一步. 4.点击左上角的中文信封. 5.然后,如果有提示的话,你可以观看信封制作向导,如果没有的话,也请略过这一面. 6.展示过后,会自动创建一个新的word文档,名为:"未命名-2". 7.填写信封界面. 8.返回初建立文档,填写文章内容,然后点击发送. 注意事项 因word本身问题,可能会有发送不成功的情况,或操作步骤不同的情况.

java-请问如何用AsyncClient写一个能访问并登录网站的程序?

问题描述 请问如何用AsyncClient写一个能访问并登录网站的程序? 请问如何用AsyncClient写一个能访问并登录网站的程序?不是android-async-http AsyncHttpClient. 能够根据地址,还有用户名和密码就能登录网站.初学网络程序设计,所以希望代码简洁些.请大家帮帮忙,谢谢.

编程-如何用MFC写输入程序??

问题描述 如何用MFC写输入程序?? 想编个输入法,可是刚开始就为难了,网上虽然有很多相关资料,却没有人告诉你到底该如何写dll如何运行程序才能将输入法显示出来... 解决方案 输入法有一套框架的,好像是 SIP 之类的.另外,如果使用 MFC 做为开发基础,MFC 是必须要精的. 解决方案二: 先找个例子,学习下MFC基本用法,比如消息机制,控件等.然后在做个简单的动态链接库.最后看输入法的资料,开始写.慢慢来,不要想一下子搞定,写个简单的,慢慢迭代增加功能. 解决方案三: mfc与输入法没有

矩形和圆 位置关系-如何用C++写出:判断矩形和圆的位置关系?

问题描述 如何用C++写出:判断矩形和圆的位置关系? 我知道有四种关系,相交,包含(两种),相离. 圆包含矩形的情况可以 检测圆的四个坐标轴方向点的坐标是否在矩形内或在矩形上 矩形包含圆的情况可以 检测矩形的四点是否在圆中 但是矩形和圆相交相离就不知道怎么判断了....

c# com组件-求助c#写com组件有毒 看了无数文章也无法公开一个类中的函数

问题描述 求助c#写com组件有毒 看了无数文章也无法公开一个类中的函数 看了无数文章和博客尝试了无数方法依然无法解决这个问题 编译的com组件永远只有 _object 下的的几个函数自定义的函数一个也没有 下面是看着无数文章写的代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Run

如何用jquery写出单位换算器

问题描述 如何用jquery写出单位换算器 问题如题 用什么方法去写出来 简单呢 最好给我写个小例子 谢谢 解决方案 先定好公里转换率,然后再计算得到其他的就行了,多个搞点c币啊,O(∩_∩)O哈哈~... <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.2.min.js"></script> <script>

类别-如何用swift写tts程序

问题描述 如何用swift写tts程序 AVSpeechSynthesizer *tts1;AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@""i love you""];//设置语言类别(不能被识别,返回值为nil)AVSpeechSynthesisVoice *voiceType = [AVSpeechSynthesisVoice voiceWithLang

ios-如何用object-c写单元测试?

问题描述 如何用object-c写单元测试? 最近出的bug比较多,然后就被叫去喝茶,最后的结果是我要写一个叫单元测试的东西. 在网上搜了下终于知道单元测试是什么了,也知道Xcode集成了一个叫ocUnit的测试框架,就是那个Tests文件夹 但是不知道怎么用,各位大神可以帮忙指导一下吗,或者给个博客链接也可以,发个Demo也可以 邮箱:huipaodetuzi@163.com 先谢谢大家了! 解决方案 你写的是单元测试吗?用JMockit写单元测试11.2.1.2 在 F# 中写单元测试