ASP 3.0高级编程(十八)
程序员文章站
2022-05-17 14:43:36
5.2.5 引用对象类型库
在早先的asp版本中,在脚本中使用对象或时,组件内定义的公共常数(如果有的话)在asp里将不再有效。这...
5.2.5 引用对象类型库
在早先的asp版本中,在脚本中使用对象或时,组件内定义的公共常数(如果有的话)在asp里将不再有效。这意味着我们需要自己声明它们(或等价物)并指定相应的值。
例如,当在早期版本的asp中使用activex对象(ado)组件时(将在第8章进行详细的研究),不得不用记录集的open方法加入预定义常数声明。例如:
const adopenkeyset = &h0001
const adlockpessimistic = &h0003
const adcmdtable = &h0002
…
rs.open “contact”,”dsn=globalexampledata;uid=examples;password=;”, _
adopenkeyset, adlockpessimistic, adcmdtable
…
另一种方法是使用#include指令在页面插入一个名为adovbs.inc的文件。该文件由iis/asp提供,包含ado所需的所有预定义常数。更新代码时,必须确认使用的是最新版本,并检查它对于所有的页面请求都可用。
对于iis 5.0,有一个更好的方法,通过在html注释元素内使用metadata指令,可以给组件或对象的类型库增加引用(iis 4.0不支持这一功能)。
<!-- metadata type=”typelib”
file=”path_and_name_of_file”
uuid=”type_library_uuid”
verssion=”major_version_number.minor_version_number”
lcid=”locale_id”
-->
其中:
· path_and_name_of_file是某一类型库文件(.tlb)或activex dll的绝对物理路径,必须提供这一参数或者是type_library_uuid参数。
· type_library_uuid是该类型库的唯唯一标识符,必须提供这一参数或者是path_and_name_of_file参数。
· major_version_number.minor_version_number(可选)定义了所需组件的版本。如果没有该版本则使用最近的版本。
· locale_id(可选)是区域标志符。如果在该区域没有发现类型库,计算机将使用缺省的(安装时定义的)区域。
因此,使用这一技术,通过使用下面的代码,能使内置的ado预定义常数在asp页面可用:
<!-- metadata type=”typelib”
file=”c:program filescommon filessystemadomsado15.dll”
-->
文件名msado15.dll还可用于更高版本(2.50以后)的ado组件。
如果asp不能装载类型库,就返回一个错误并停止该页的执行。可能的错误提示如表5-1所示:
表5-1 错误提示代码及说明
错 误 说 明
asp 0222 无效的类型库说明
asp 0223 未找到类型库
asp 0224 类型库不能加载
asp 0225 类型库不能打包(即asp不能从指定的类型库中创建类型库包装对象)
5.2.6 在客户端上创建对象实例
在asp中讨论在服务器上实例化对象和组件的技术时,值得强调的是在中运行客户端页面而完成同样工作的方式。如果你使用asp创建包含客户端脚本程序的页面,或者使用<object>元素创建客户端组件实例,将会发现这是非常有用的。在大多数情况下,脚本运行期对象可在客户端上实例化和使用,效果与服务器上的asp相同。
1. vbscript createobject方法
在客户端使用createobject时,在浏览器的环境内创建组件或对象实例,它们与浏览器运行在相同的内存空间里(即进程内),除非实现的对象是带有.exe扩展文件名的可执行文件。
通常指定对象的classid,而不是使用progid字符串,这样就不可能与其他安装在客户端的对象发生冲突。
<script language=”vbscript”>
dim objthis
set objthis = createobject(“clsid:892d6da7-e0f9-00105a42af30”)
…
</script>
当然也可以使用progid,并且使用通用的对象或组件(特别是标准安装提供的对象或组件),那么得到错误的组件的风险是很小的:
<script language=”vbscript”>
dim objthis
set objthis = createobject(“scripting.dictionary”)
…
</script>
2. jscript activexobject方法
为了在客户端上实例化jscript的对象和组件,必须使用activexobject方法和new操作符:
<script language=”jscript”>
var objmydata = new activexobject(‘clsid: 892d6da7-e0f9-00105a42af30’);
</script>
或:
<script language=”jscript”>
var objmydata = new activexobject(‘this.object’);
</script>
3. <object>元素技术
也可使用<object>元素创建客户端对象或组件的实例。应省略runat属性或者将其设定为“client”。然而,这个属性在客户端上是被忽略的,因此设置这个属性的唯一目的就是,在asp页面使用<object>元素实例化服务器端的组件实例时防止混淆。
<object id=”objthis” runat=”client”
classid=”clsid: 892d6da7-e0f9-00105a42af30”
codebase=”https://yourserver.com/components/mycomponent.cab”>
<param name=”param1” value=”value1”>
<param name=”param2” value=”value2”>
</object>
注意,这里出现的codebase属性,表示允许下载并安装来自url的组件(如果该组件没有安装)。ie 3.0以上的版本有此功能。
对于使用<object>元素的方法、可使用的属性、在客户端使用的值,可查看网站https://msdn.microsoft.com/workshop/author/dhtml/reference/objects/object.,或者windows 2000 platform sdk文档中的<object> tags,或者看看《ie5 dynamic html programmer’ reference》一书,isbn 1-861001-74-6,wrox出版社。
5.3 scripting.dictionary对象
许多microsoft的语言,如visual basic、vbscript和jscript,都提供集合(collection)。可以把集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务。无须担心数据是在哪些行列,而是使用唯一的键进行访问。
vbscript和jscript都提供类似的对象,通称scripting.dictionary对象或dictionary对象。它类似于二维数组,把键和相关条目的数据存放在一起。然而真正的面向对象的方法,不应直接访问数据条目,必须使用dictionary对象支持的方法和属性来实现。
本章提供了一些示例页面,允许试验脚本运行期对象的方法和属性。这些实例在下载的文件的文件的chaper05子目录里。
5.3.1 创建和使用dictionary对象
创建一个dictionary对象的示例如下:
‘in vbscript:
dim objmydata
set objmydata = server.createobject(“scripting.dictionary”)
//in jscript:
var objmydata = server.createobject(‘scripting.dictionary’);
<!-- server-side with an object element -->
<object runat=”server” scope=”page” id=”objmydata”
progid=”scripting.dictionary”>
</object>
dictionary对象还可用于客户端的ie中。
1. dictionary对象的成员概要
表5-2和表5-3列出了dictionary对象的属性和方法及相应的说明。
当增加一个键/条目对时,如果该键已存在;或者删除一个键/条目对时,该关键字/条目对不存在,或改变已包含数据的dictionary对象的comparemode,都将产生错误。
表5-2 dictionary对象的属性和说明
属 性 说 明
comparemode&nb
在早先的asp版本中,在脚本中使用对象或时,组件内定义的公共常数(如果有的话)在asp里将不再有效。这意味着我们需要自己声明它们(或等价物)并指定相应的值。
例如,当在早期版本的asp中使用activex对象(ado)组件时(将在第8章进行详细的研究),不得不用记录集的open方法加入预定义常数声明。例如:
const adopenkeyset = &h0001
const adlockpessimistic = &h0003
const adcmdtable = &h0002
…
rs.open “contact”,”dsn=globalexampledata;uid=examples;password=;”, _
adopenkeyset, adlockpessimistic, adcmdtable
…
另一种方法是使用#include指令在页面插入一个名为adovbs.inc的文件。该文件由iis/asp提供,包含ado所需的所有预定义常数。更新代码时,必须确认使用的是最新版本,并检查它对于所有的页面请求都可用。
对于iis 5.0,有一个更好的方法,通过在html注释元素内使用metadata指令,可以给组件或对象的类型库增加引用(iis 4.0不支持这一功能)。
<!-- metadata type=”typelib”
file=”path_and_name_of_file”
uuid=”type_library_uuid”
verssion=”major_version_number.minor_version_number”
lcid=”locale_id”
-->
其中:
· path_and_name_of_file是某一类型库文件(.tlb)或activex dll的绝对物理路径,必须提供这一参数或者是type_library_uuid参数。
· type_library_uuid是该类型库的唯唯一标识符,必须提供这一参数或者是path_and_name_of_file参数。
· major_version_number.minor_version_number(可选)定义了所需组件的版本。如果没有该版本则使用最近的版本。
· locale_id(可选)是区域标志符。如果在该区域没有发现类型库,计算机将使用缺省的(安装时定义的)区域。
因此,使用这一技术,通过使用下面的代码,能使内置的ado预定义常数在asp页面可用:
<!-- metadata type=”typelib”
file=”c:program filescommon filessystemadomsado15.dll”
-->
文件名msado15.dll还可用于更高版本(2.50以后)的ado组件。
如果asp不能装载类型库,就返回一个错误并停止该页的执行。可能的错误提示如表5-1所示:
表5-1 错误提示代码及说明
错 误 说 明
asp 0222 无效的类型库说明
asp 0223 未找到类型库
asp 0224 类型库不能加载
asp 0225 类型库不能打包(即asp不能从指定的类型库中创建类型库包装对象)
5.2.6 在客户端上创建对象实例
在asp中讨论在服务器上实例化对象和组件的技术时,值得强调的是在中运行客户端页面而完成同样工作的方式。如果你使用asp创建包含客户端脚本程序的页面,或者使用<object>元素创建客户端组件实例,将会发现这是非常有用的。在大多数情况下,脚本运行期对象可在客户端上实例化和使用,效果与服务器上的asp相同。
1. vbscript createobject方法
在客户端使用createobject时,在浏览器的环境内创建组件或对象实例,它们与浏览器运行在相同的内存空间里(即进程内),除非实现的对象是带有.exe扩展文件名的可执行文件。
通常指定对象的classid,而不是使用progid字符串,这样就不可能与其他安装在客户端的对象发生冲突。
<script language=”vbscript”>
dim objthis
set objthis = createobject(“clsid:892d6da7-e0f9-00105a42af30”)
…
</script>
当然也可以使用progid,并且使用通用的对象或组件(特别是标准安装提供的对象或组件),那么得到错误的组件的风险是很小的:
<script language=”vbscript”>
dim objthis
set objthis = createobject(“scripting.dictionary”)
…
</script>
2. jscript activexobject方法
为了在客户端上实例化jscript的对象和组件,必须使用activexobject方法和new操作符:
<script language=”jscript”>
var objmydata = new activexobject(‘clsid: 892d6da7-e0f9-00105a42af30’);
</script>
或:
<script language=”jscript”>
var objmydata = new activexobject(‘this.object’);
</script>
3. <object>元素技术
也可使用<object>元素创建客户端对象或组件的实例。应省略runat属性或者将其设定为“client”。然而,这个属性在客户端上是被忽略的,因此设置这个属性的唯一目的就是,在asp页面使用<object>元素实例化服务器端的组件实例时防止混淆。
<object id=”objthis” runat=”client”
classid=”clsid: 892d6da7-e0f9-00105a42af30”
codebase=”https://yourserver.com/components/mycomponent.cab”>
<param name=”param1” value=”value1”>
<param name=”param2” value=”value2”>
</object>
注意,这里出现的codebase属性,表示允许下载并安装来自url的组件(如果该组件没有安装)。ie 3.0以上的版本有此功能。
对于使用<object>元素的方法、可使用的属性、在客户端使用的值,可查看网站https://msdn.microsoft.com/workshop/author/dhtml/reference/objects/object.,或者windows 2000 platform sdk文档中的<object> tags,或者看看《ie5 dynamic html programmer’ reference》一书,isbn 1-861001-74-6,wrox出版社。
5.3 scripting.dictionary对象
许多microsoft的语言,如visual basic、vbscript和jscript,都提供集合(collection)。可以把集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务。无须担心数据是在哪些行列,而是使用唯一的键进行访问。
vbscript和jscript都提供类似的对象,通称scripting.dictionary对象或dictionary对象。它类似于二维数组,把键和相关条目的数据存放在一起。然而真正的面向对象的方法,不应直接访问数据条目,必须使用dictionary对象支持的方法和属性来实现。
本章提供了一些示例页面,允许试验脚本运行期对象的方法和属性。这些实例在下载的文件的文件的chaper05子目录里。
5.3.1 创建和使用dictionary对象
创建一个dictionary对象的示例如下:
‘in vbscript:
dim objmydata
set objmydata = server.createobject(“scripting.dictionary”)
//in jscript:
var objmydata = server.createobject(‘scripting.dictionary’);
<!-- server-side with an object element -->
<object runat=”server” scope=”page” id=”objmydata”
progid=”scripting.dictionary”>
</object>
dictionary对象还可用于客户端的ie中。
1. dictionary对象的成员概要
表5-2和表5-3列出了dictionary对象的属性和方法及相应的说明。
当增加一个键/条目对时,如果该键已存在;或者删除一个键/条目对时,该关键字/条目对不存在,或改变已包含数据的dictionary对象的comparemode,都将产生错误。
表5-2 dictionary对象的属性和说明
属 性 说 明
comparemode&nb
上一篇: 第一课 关于侧边栏下拉手风琴的实现
下一篇: 对const的总结与思考