您的位置:首页精文荟萃软件资讯 → ASP讲座之十:自己动手编写组件

ASP讲座之十:自己动手编写组件

时间:2004/10/7 19:17:00来源:本站整理作者:蓝点我要评论(0)

在前面的内容中,我们学习了组件的使用,网上的组件虽然不少,但往往小小的一个组件就要你掏出美元来,而国产的组件又太少,想掏点人民币还没地儿好掏,算了,您干脆自己写吧,其实编写组件并不难,无非是刚开始写低水平的组件,慢慢开始写高水平的组件而已。要编写ActiveX Server Components,有多种工具可供选择:Visual Basic、C++、Java等等,这里选择最简单的VB6.0,只要你以前用过VB,包你不到1小时之内,做一个小组件出来。



一、  组件编写速成——编写组件最基本的步骤

本部分主要讲解编写组件的基本步骤,如果你有进一步学习的欲望,请参照VB6.0帮助文档中“创建 ActiveX DLL”部分(MSDN Library中文档文件名为Vbcon98.chm)。

目的:编写一个最简单的加法器组件,这个组件有两个属性,一个方法。我们从最熟悉的地方开始,那就是先假设这个组件已经存在,看看在ASP使用该组件的代码:

<%

Dim objSum

‘ 先创建该组件组件标识为 TestDll.Sum

Set objSum = Server.CreateObject("TestDll.Sum")

‘ 记住TestDll.Sum 中的“TestDll”,“Sum”。

objSum.augend = 10.52       ‘augend 属性为被加数

objSum.addend = 382.41      ‘addend 属性为加数

Result = objSum.Plus        ‘Plus 方法求和

Response.Write Result

Set objSum = Nothing

%>

请务必记住这几个关键词:TestDll、Sum、augend、addend、Plus,这将与接下来的工作紧密关联。下面是详细步骤:

1. 运行VB6.0,在“文件”菜单中,单击“新建工程”→在“新建工程”对话框中,双击“ActiveX DLL”图标→Visual Basic 将向该新工程中自动添加一个类模块 Class1(在“工程资源管理器”中可以看到,如图1)。

2.按 F4 键打开“属性”窗口。双击“名称”属性把“Class1”改成 Sum。

3.在“工程”菜单中,单击“工程1 属性”打开“工程属性”对话框。在“工程名称”中填写TestDll,在“工程描述”中填写“创建ActiveX DLL示例”。如图2。

    提示:ASP创建组件中的标识TestDLL.Sum这两项的意思明白了吧。

4.在“文件”菜单中,单击“保存工程”,分别使用下面的名称保存工程文件:SetupDll.cls和SetupDll.vbp。

5.为 Sum 类创建属性:

(1)  在“工具”菜单中,选择“添加过程”打开“添加过程”对话框。在“名称”框中,输入augend,单击“属性”,然后单击“确定”,如图3(注意:当前焦点应在代码窗口,否则“添加过程”菜单无效)。

(2)  在“工具”菜单中,选择“添加过程”打开“添加过程”对话框。在“名称”框中,输入addend,单击“属性”,然后单击“确定”。

6.为 Sum 类创建方法:

在“工具”菜单中,单击“添加过程”打开“添加过程”对话框。在“名称”框中,输入Plus,在类型中,你可以选择“子程序”或“函数”,本例中由于要返回加数与被加数之和,故单击“函数”,然后单击“确定”。

现在,前面ASP代码中的五个关键词语都已用上,这下很多东西都明白了吧。

7.类模块Sum代码窗口中所有代码如下:

Option Explicit

Private mdbl_augend As Double

Private mdbl_addend As Double



Public Property Get augend() As Double

    augend = mdbl_augend

End Property



Public Property Let augend(ByVal vNewValue As Double)

    mdbl_augend = vNewValue

End Property



Public Property Get addend() As Double

    addend = mdbl_addend

End Property



Public Property Let addend(ByVal vNewValue As Double)

    mdbl_addend = vNewValue

End Property



Public Function Plus()

    Plus = augend + addend

End Function

你已经注意到以上代码与系统生成的代码有点不同,主要是Public Property Get augend() As Variant部分用实际的数据类型Double替代了。

注意:实际上,当执行 x = objSum.augend 语句时,调用的是 Property Get 过程,获取mdbl_augend的值,而执行 objSum.augend = 10.52 语句时,将调用 Property Let 过程,将10.52赋给 mdbl_augend。

8.最后一步,在“文件”菜单中,单击“生成.Dll(K)…”,生成文件SetupDll.dll。



到这里,组件已创建好了。现在,我们可以先在VB6中编写一个测试工程,测试一下该文件正确与否。

1.在“文件”菜单中,单击“新建工程” →双击“标准EXE”。

2.在“工程”菜单中,单击“引用” →在“引用”对话框中按“浏览”按钮,选择刚刚编译过的“SetupDll.dll”文件→单击“确定”。

3.最后在代码窗口中编写如下代码:

Option Explicit

Private Sub Form_Load()

    Dim objSum As TestDll.Sum

    Set objSum = New Sum

    

    objSum.augend = 10.52

    objSum.addend = 382.41

    MsgBox objSum.Plus

End Sub

运行一下,结果正确,接下来我们在ASP中使用这个组件。将SetupDll.dll拷到Web服务器中,并用“Regsvr32.exe setupdll.dll”命令注册该组件,然后在浏览器中执行本部分开头的ASP程序。如果不行的话,你可以尝试先用VB6的打包工具打包,然后再安装,组件会自动注册,而且一些必需的VB6运行文件也会自动安装。

说明:本部分所有程序均在下载包的Setupdll.zip中。

    上面的例子中我们使用属性过程Property Get和Property Let来添加属性(Property Get读取属性的值,而Property Let给属性赋值),若需要对设置的值进行校验,可在Property Let过程编写适当代码。如下面代码:

Public Property Let augend(ByVal vNewValue As Double)

    If vNewValue < 100 Then

        MsgBox "搞什么!小于100的值,自己心算就行了"

    Else

        mdbl_augend = vNewValue

    End If

End Property



二、  给组件添加属性和方法的其他途径

1.添加属性最简单的一种方法:添加公共变量,如上例最简单的代码如下:

Option Explicit

Public augend As Double    ‘ 添加 augend 属性

Public addend As Double    ‘ 添加 addend 属性



Public Function Plus() As Double

    Plus = augend + addend

End Function

    但是,该方法只能设置可读/写属性,且不能对所赋值进行校验。如果仅需添加只读属性:在上例中,删除Public Property Let augend(ByVal vNewValue As Double)过程,则augend便成了一只读属性,不能赋值。当然,若要添加只写属性,只需删除Property Get过程就可以了。



2.使用类生成器实用工具

VB6中还有一个添加属性和方法的工具:在“外接程序”菜单中,单击“外接程序管理器”,在跳出的外接程序管理器对话框中选择“VB Class Builder Utility”,并在加载行为中选择“加载/卸载”(如图4)。然后再在“外接程序”菜单中单击“类生成器实用工具”,您一看就会用。



三、  告诉你几个要注意的问题

1.  上面的例子是一个简单得不能再简单的组件,比较实用的组件一般都至少还有一个模块(Module)。

2.  如果不小心, Visual Basic 可产生“单线程”组件

    也许最常见的一个陷阱就是使用了没有被设计为在 ASP 下运行的组件,如“单线程”组件。因此,请确保在“项目属性”页的“通用”选项卡上将线程模块设置为“单元线程”。

3.  关于“类型不匹配”错误。

    一个好的建议是最好声明 Out 参数为 Variant,注意上例中没有这样设置。

4.  关于全局变量的使用。

    尽量避免在组件中使用全局变量。在 Visual Basic 术语中,这表示在标准的 .BAS 模块中没有 Public 或 Global 变量。因为Global 变量并不是真正意义上的全局。每个线程都有自己的副本,如果几种方法恰好在同一线程中执行,它们将看到相同的变量;否则它们访问的是这些变量的不同副本。这意味着您可能给一个全局变量赋了值(在线程 A 中),但其另一个用户(在线程 B 中执行)看不到新值。其原因是 Visual Basic 内部使用“线程本地存储 (TLS)”来引用全局变量。这意味着每个线程都有自己的 Public 变量的副本,并且因为它存在多个副本,全局数据并不是真正“全局的”。也就是说,恰好在同一线程中运行的用户才会访问到同一个变量,不论他们是否期望如此。



    最后顺便提一下,VB6.0引入了一种全新的Visual Basic应用程序:IIS应用程序。你可以象创建ActiveX DLL一样创建IIS应用程序,任何用Active Server Pages创建的应用程序都可以在VB开发环境中创建,你可以用单个的VB应用程序完全替代所有的Active Server Pages。


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本