Asp组件初级入门与精通.docx
《Asp组件初级入门与精通.docx》由会员分享,可在线阅读,更多相关《Asp组件初级入门与精通.docx(12页珍藏版)》请在冰豆网上搜索。
![Asp组件初级入门与精通.docx](https://file1.bdocx.com/fileroot1/2023-1/3/55755b59-c9c7-4573-8911-e5a8d10392d2/55755b59-c9c7-4573-8911-e5a8d10392d21.gif)
Asp组件初级入门与精通
Asp组件初级入门与精通
2009-05-0600:
00T|T
Asp组件初级入门与精通系列之一
一直以来,想写一些组件方面的应用,这段时间终于可以写一点自己喜欢的东西。
希望大家通过这些教程学习后,可以随心所欲的写出自己的组件。
每篇文章可能没有关联,只是写一些组件编写过程中出现的问题。
欢迎大家批评指正
环境:
winxp+vb6+sp6+visualinterdev6.0
作为第一篇,我们先来写一个比较简单的组件
完成的功能是:
输入两个数相加,返回相加的结果
打开vb6,新建ActivexDll工程。
工程名修改为fCom,类名修改为fC1
点击菜单->工具->添加过程
我们在名称内输入Add,类型选择函数,范围选择公有,然后确定即可
生成如下代码,我们继续完善
程序代码
OptionExplicit
PublicFunctionAdd(ByValaAsLong,ByValbAsLong)AsLong
Add=a+b
EndFunction
Ok,一个简单的组件就写好了,点击菜单->文件->生成fCom.dll文件
确定,在目录下就会有fCom.dll文件
测试
打开visualinterdev6.0,生成一个asp文件,为什么要使用interdev,因为它有代码提示功能,与vb的ide环境一致,方便书写
程序代码
<%@Language=VBScript%>
<%
setobj=server.CreateObject("fCom.fC1")
'下面这句注意了,因为函数有返回值的,不能按下面的方法写,否则ie中会报错
'obj.Add(3,4)
'错误类型:
'MicrosoftVBScript编译器错误(0x800A0414)
'调用子程序时不能使用括号
'/xml/fc1.asp,line9,column12
'obj.Add(3,4)
'下面是正确写法
dimc
c=obj.Add(3,4)
Response.Writec
%>
配置好虚拟目录,在ie中执行此asp文件,得到结果7
第一篇结束了,祝大家学习愉快。
Asp组件初级入门与精通系列之二
如何注册组件
1.regsvr32组件的绝对路径
如:
程序代码
regsvr32c:
\test\fc1.dll
因为组件只要注册就可以使用了,所以与组件的位置无关。
2.在COM+组件管理器中注册
什么时候需要这种注册:
组件在使用了COM+的服务后需要注册后才能正常的执行。
如果该组件仅仅regsvr32注册,仍然无法使用
如何使用组件
程序代码
setobj=server.createobject(“工程名.类名”)
然后调用其方法属性
如何卸载组件
1.regsvr32组件的绝对路径
如:
程序代码
regsvr32c:
\test\fc1.dll/u
u参数反注册组件
2.COM+组件管理器中删除组件即可
Asp组件初级入门与精通系列之三
如何使用属性
打开vb6,新建ActivexDll工程。
工程名修改为fCom,类名修改为fC2
点击菜单->工具->添加过程
我们在名称内输入myName,类型选择属性,范围选择公有,然后确定
再次操作:
在名称内输入Age,类型选择属性,范围选择公有,然后确定
再次操作:
在名称内输入peopleInfo,类型选择函数,范围选择公有,然后确定即可
代码如下:
程序代码
OptionExplicit
'保持属性值的局部变量,只能在类中使用
PrivatemvarmyNameAsString
PrivatemvarAgeAsInteger
'Let写属性(Let属性:
该过程给一个属性赋值。
)
PublicPropertyLetAge(ByValvDataAsInteger)
mvarAge=vData
EndProperty
'Get读属性(该过程获取一个属性的值。
)
PublicPropertyGetAge()AsInteger
Age=mvarAge
EndProperty
PublicPropertyLetmyName(ByValvDataAsString)
mvarmyName=vData
EndProperty
PublicPropertyGetmyName()AsString
myName=mvarmyName
EndProperty
PublicFunctionpeopleInfo()AsString
peopleInfo="姓名:
"&mvarmyName&"年龄:
"&mvarAge
EndFunction
Ok,一个简单的组件就写好了,点击菜单->文件->生成fCom.dll文件
确定,在目录下就会有fCom.dll文件
测试
打开visualinterdev6.0,生成一个asp文件,为什么要使用interdev,因为它有代码提示功能,与vb的ide环境一致,方便书写
程序代码
<%@Language=VBScript%>
<%
setobj=server.CreateObject("fCom.fC2")
dimc
'这里调用的是组件的Let属性
obj.myName="龙卷风"
obj.Age=20
c=obj.peopleInfo()
Response.Writec
'这里调用的是组件的Get属性
Response.Write"
"
Response.Writeobj.myName
Response.Write"
"
Response.Writeobj.Age
%>
配置好虚拟目录,在ie中执行此asp文件,得到结果如下:
姓名:
龙卷风年龄:
20
龙卷风
20
未完待续
Asp组件初级入门与精通系列之四
数组问题
数组在程序中使用的很多,而且比较容易出问题
我们通过小例子来看看
打开vb6,新建ActivexDll工程。
工程名修改为fCom,类名修改为fC4
点击菜单->工具->添加过程
我们在名称内输入AcceptArray1,类型选择子程序,范围选择公有,然后确定
再次操作:
在名称内输入AcceptArray2,类型选择函数,范围选择公有,然后确定即可
程序代码
'功能:
传递数组地址到组件,使用ByRef关键字,并赋值返回
PublicSubAcceptArray1(ByRefvarrayAsVariant)AsVariant
varray(0)="龙卷风"
varray
(1)="20"
EndSub
'功能:
返回一个字符串数组
PublicFunctionAcceptArray2()AsVariant
Dima
(2)asVariant
a(0)="龙卷风"
a
(1)="20"
AcceptArray2=a
EndFunction
Ok,一个组件就写好了,点击菜单->文件->生成fCom.dll文件
确定,在目录下就会有fCom.dll文件
测试
打开visualinterdev6.0,生成一个asp文件
程序代码
<%@Language=VBScript%>
<%
dimobj
setobj=server.createobject("fCom.fC4")
dima
(2)
'测试第一个组件方法
obj.AcceptArray1(a)
response.writea(0)
response.write"
"
response.writea
(1)
response.write"
"
'测试第二个组件方法
dimb
b=obj.AcceptArray2()
fori=0toubound(b)
Response.Writeb(i)
response.write"
"
next
%>
配置好虚拟目录,在ie中执行此asp文件,得到结果如下:
龙卷风
20
龙卷风
20
总结一下:
字符串,数字通过值传递或者作为返回值被返回
如果使用引用传递,将参数的类型设为Variant。
这样做可以避免一些错误。
不过尽可能的减少引用传递参数
未完待续
Asp组件初级入门与精通系列之五
经常我们可以看到在连接数据库,打开记录集的时候,如下:
程序代码
rs.Openstrsql,conn,adOpenDynamic,adLockPessimistic
在键入”,”的时候,后面会出现一个游标类型或者锁类型列表可以供选择。
有时候我们为了简化,直接rs.openstrsql,conn,1,3
第一种方法是不是更加专业一些,我们来看看asp中如何实现
打开vb6,新建ActivexDll工程。
工程名修改为fCom,类名修改为fC5
程序代码
OptionExplicit
'定义枚举类型
PublicEnumInterfacedig
icfirst=1
icsecond=2
icthree=3
icfour=4
icfive=5
icsix=6
icserven=7
iceight=8
EndEnum
'定义函数
PublicFunctionCallDat(ByValidigAsInteger,ByValicsAsInterfacedig)AsVariant
CallDat=idig*ics
EndFunction
Ok,一个组件就写好了,点击菜单->文件->生成fCom.dll文件
确定,在目录下就会有fCom.dll文件
测试
打开visualinterdev6.0,生成一个asp文件
程序代码
<%@Language=VBScript%>
<%
'定义,还可以把这一部分放到一个文件中,就像ado的记录集
--#includefile="adovbs.inc"-->
consticfirst=1
consticsecond=2
consticthree=3
consticfour=4
consticfive=5
consticsix=6
consticserven=7
consticeight=8
setobj=server.CreateObject("fCom.fc5")
'这里可以使用iceight或者8,但是前者使代码具有更好的可读性
a=obj.CallDat(4,iceight)
Response.Writea
Response.Write"
"
a=obj.CallDat(4,8)
Response.Writea
%>
配置好虚拟目录,在ie中执行此asp文件,得到结果如下:
32
32
Asp组件初级入门与精通系列之六
错误处理
如果页面出错,而没有对错误的处理,那么页面会显示一个用户可能看不懂的错误。
在asp脚本中可以使用
程序代码
OnErrorResumeNext
……
ifErr.Number<>0then
Response.WriteErr.Description
Endif
但是如果组件中出错呢?
这种方法可以捕获错误,但是具体的错误如何知道呢?
我们可以在组件中加入错误处理,来返回错误,这样可以容易的看到更加详细的出错信息,有助于我们排除错误。
使用Err.Raise,Raise被用来生成运行时错误
打开vb6,新建ActivexDll工程。
工程名修改为fCom,类名修改为fC6
程序代码
OptionExplicit
PublicSubshowerror1()
OnErrorGoToErrorHandle
DimiAsDouble
i=1/0
ErrorHandle:
Err.RaiseErr.Number,Err.Source,Err.Description
EndSub
'生成自定义的错误
PublicSubshowerror2()
Err.Raise600,"自己定义的错误600","这是描述自己程序的错误"
EndSub
Ok,一个组件就写好了,点击菜单->文件->生成fCom.dll文件
确定,在目录下就会有fCom.dll文件
测试
打开visualinterdev6.0,生成一个asp文件
程序代码
<%@Language=VBScript%>
<%
'下面这一句很重要
onerrorresumenext
setobj=server.CreateObject("fCom.fc6")
obj.showerror1()
'如果没有错误处理,就会产生一个出错的界面,很不专业
'从0–512的范围保留为系统错误;从513–65535的范围可以用做用户定义的错误。
'如果是保留错误,那么组件内错误号和页面处理的错误号是相一致的
iferr.number<>0then
Response.Write"错误信息"&err.number&err.Description
endif
Response.Write"
"
'如果是用户定义的错误,那么在页面中可以分别进行处理
obj.showerror2()
iferr.number<>0then
iferr.number=600then
Response.Writeerr.number&err.Source&err.Description
endif
endif
%>
配置好虚拟目录,在ie中执行此asp文件,得到结果如下:
错误信息11除数为零
600自己定义的错误600这是描述自己程序的错误
Asp组件初级入门与精通系列之七
在运行前几章的例子,可能或多或少的都会碰上一些问题
如:
组件编译后,又要修改,发生”权限被拒绝,’f:
\csdn\fcom.dll’”等等的错误。
当asp页面浏览时,打开任务管理器,会看到一个dllhost.exe,用户名为IWAM_YANG的进程。
IWAM_YANG会根据计算机名而有所不同。
可以使用以下几种方式来解决
1.重新启动iis.
在控制面板中找到管理工具->internet信息服务->右键点击左边树图第二层本地计算机->所有任务->重新启动IIS即可,这个操作需要一点时间。
此时你可以看到这个dllhost.exe的进程已经关闭
2.上面这种方法的缺点就是当前所有的网站都被关闭直到重新启动
有没有针对单个网站或者虚拟目录的?
有
在控制面板中找到管理工具->internet信息服务->找到你的组件运行的虚拟目录。
->右键属性->第一项虚拟目录中->应用程序保护->点击卸载即可。
此时你可以看到这个dllhost.exe的进程已经关闭
3.如果你觉得麻烦,直接在Windows任务管理器中结束该进程既可
4.最后一种方法
在控制面板中找到管理工具->组件服务->在树图中点击计算机,我的电脑,正在运行的进程->IISOut-Of-ProcessPooledApplications(2860)->右键关闭即可
此时你可以看到这个dllhost.exe的进程已经关闭。
本文来自:
站长之家()详细出处参考: