Asp组件初级入门与精通.docx

上传人:b****6 文档编号:6131595 上传时间:2023-01-04 格式:DOCX 页数:12 大小:18.96KB
下载 相关 举报
Asp组件初级入门与精通.docx_第1页
第1页 / 共12页
Asp组件初级入门与精通.docx_第2页
第2页 / 共12页
Asp组件初级入门与精通.docx_第3页
第3页 / 共12页
Asp组件初级入门与精通.docx_第4页
第4页 / 共12页
Asp组件初级入门与精通.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Asp组件初级入门与精通.docx

《Asp组件初级入门与精通.docx》由会员分享,可在线阅读,更多相关《Asp组件初级入门与精通.docx(12页珍藏版)》请在冰豆网上搜索。

Asp组件初级入门与精通.docx

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的进程已经关闭。

本文来自:

站长之家()详细出处参考:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1