首页 > 开发 > 综合 > 正文

如何用VB6写COM组件(转)

2024-07-21 02:15:40
字体:
来源:转载
供稿:网友

   所幸的是,我们可以用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内置对象一样简单了。



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表