asp

位置:IT落伍者 >> asp >> 浏览文章

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


发布日期:2022年06月26日
 
ASP讲座之十:自己动手编写组件

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

本部分主要讲解编写组件的基本步骤如果你有进一步学习的欲望请参照VB帮助文档中创建 ActiveX DLL部分(MSDN Library中文档文件名为Vbconchm)

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

<%

Dim objSum

先创建该组件组件标识为 TestDllSum

Set objSum = ServerCreateObject(TestDllSum)

记住TestDllSum 中的TestDllSum

objSumaugend = augend 属性为被加数

objSumaddend = addend 属性为加数

Result = objSumPlusPlus 方法求和

ResponseWrite Result

Set objSum = Nothing

%>

请务必记住这几个关键词TestDllSumaugendaddendPlus这将与接下来的工作紧密关联下面是详细步骤

运行VB文件菜单中单击新建工程→在新建工程对话框中双击ActiveX DLL图标→Visual Basic 将向该新工程中自动添加一个类模块 Class(在工程资源管理器中可以看到如图

.按 F 键打开属性窗口双击名称属性把Class改成 Sum

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

提示ASP创建组件中的标识TestDLLSum这两项的意思明白了吧

.在文件菜单中单击保存工程分别使用下面的名称保存工程文件SetupDllcls和SetupDllvbp

.为 Sum 类创建属性

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

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

.为 Sum 类创建方法

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

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

.类模块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 = objSumaugend 语句时调用的是 Property Get 过程获取mdbl_augend的值而执行 objSumaugend = 语句时将调用 Property Let 过程赋给 mdbl_augend

.最后一步文件菜单中单击生成Dll(K)…生成文件SetupDlldll

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

.在文件菜单中单击新建工程 →双击标准EXE

.在工程菜单中单击引用 →在引用对话框中按浏览按钮选择刚刚编译过的SetupDlldll文件→单击确定

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

Option Explicit

Private Sub Form_Load()

Dim objSum As TestDllSum

Set objSum = New Sum

objSumaugend =

objSumaddend =

MsgBox objSumPlus

End Sub

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

说明本部分所有程序均在下载包的Setupdllzip中

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

Public Property Let augend(ByVal vNewValue As Double)

If vNewValue < Then

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

Else

mdbl_augend = vNewValue

End If

End Property

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

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

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过程就可以了

.使用类生成器实用工具

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

告诉你几个要注意的问题

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

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

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

. 关于类型不匹配错误

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

. 关于全局变量的使用

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

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

上一篇:ASP应用程序八大对象介绍(下)

下一篇:Asp组件检测函数