日期:2011-01-04  浏览次数:21041 次

概述
如果你用ASP做开发, 你可能已经在你的ASP页面中用过COM了.但是,在你自己开发一个COM部件或阅读一本详细介绍COM的书之前,你很可能并没有完全理解COM,因而不能充分利用它来创建你的ASP页面.同时,你也不能很好的理解那些随COM部件带来的使用文档.如果你知道COM的标准和限制,你就可以很快的学会开发其他的COM部件.
在这个教程里,我们将学到COM是怎样工作的,你还将学到精通COM的知识.

本教程的读者
本教程将给那些已经使用过VBscript 语言的,特别是用过ADO但是不知道那就是COM的人详细描述COM模型.他将告诉你:

1.属性和方法的区别
2.属性需要参数吗
3.只读属性是什么意思
4.什么是集合对象
5.每个集合对象都有些什么属性
6.不调用方法如何对集合排序
7.在一个DLL中可以有多少个COM部件.

基础知识
COM是一个对象接口的标准.定义一个COM对象只需要定义方法和属性,没有其他的接口.从一个程序员的观点来看,属性和方法之间没有太大的区别.方法可以带参数,属性不能.属性可以读写,方法如果要返回值的话,是只读的.

尽管从编程角度看,属性和方法没有太大的区别,但是部件开发者用他们完成不同的功能.属性通常代表一个对象的状态,但是调用方法可以完成任何想完成的任务,不管他包含对象的状态与否.

属性
属性不需要参数,用来描述或设置对象的状态.所有的属性返回一个值,有些属性是只读的,有些是可读可写的.下面是VBscript中读取属性的表达式例:

例 1:

value = object.property


注意这里没有用括号.例二是设置属性例:

例 2:

object.property = value


方法
方法可以带参数,可以返回值.通常用来初始化一个对象的事件.当给方法传递参数时,方法可以用来设置值.如果方法只返回值,不设置值的话,表达式如下:

例 3:

value = object.method()


注意例3中用了括号.调用方法来返回值时必须用括号.例如,对象Connection有一个Execute方法返回一个Recordset对象.例:

例 4:

Set RS = Conn.Execute("SELECT * FROM TABLE")


不用返回值,不用参数的方法,如Connection对象的Close方法:

例 5:

Conn.Close


参数
方法可以带一个或多个参数,或一个也不要.但是,参数并不是必需的. 一旦一个参数是可选的,其后的参数都是可选的.例如,参数一和参数二是必需的,参数三是可选的,则参数四必定是可选的.一个很好的例子是Connection对象的Open方法.他有八个可选的参数.前三个用来传递数据库和等录的信息.你可以像例6那样调用Open方法:

例 6:

Conn.Open "DSN","sa",""


为了提供DSN名,用户名,口令为空,你也可以想例7那样调用:

例 7:

Conn.Open "driver=SQL Server;server=yourServerName;uid=someUID;" &_
"pwd=somePWD;database=someDatabase;"


注意在例6中我们用了三个参数,在例7中只用了一个,结果是一样的.

调用方法时,以逗号分隔,让可选的参数空着,将给该参数传递空值,
在例6中,可选参数用缺省值,在例八中用空值.

例 8:

Conn.Open "DSN","sa","", , , ,


集合
集合是本身包含了许多对象的对象集,所有的集合都包含一些预定义的方法和属性.一个集合有一个Item方法,一个Count属性,一个 _NewEnum方法.集合有建立类型与他相同的对象的能力.换句话说,如果一个对象可以被包含进一个集合中,那么,哎,这句话好难,我不翻了,给出原文吧.( In other words, if a particular object can be group in a set then that object will have a collection object that can create an instance of an object within the set. For instance, a Drives collection object will contain a set of drives that might represent all the drives on a particular computer).

Count属性返回一个代表集合中元素个数的长整型值.给Item方法传递一个长整数(当然应在1和Count之间),就返回集合中这个索引所指向的对象.就像数组那样.(原文此处混乱,稍做调整)

例 9(1):

Set Object = Collection.Item(2)

因为Item是缺省方法,所以你也可以如下调用:

例 9(2):

Set Object = Collection(2)



_NewEnum 方法可以反复调用,

例 9:

For Each Object in Collection

Next Object

(以下不译)
Notice that the _NewEnum method is not referenced within the syntax of the
statement in example 6. This is because the _NewEnum method has a special
index that Visual Basic recognizes as being used for the For Next statement. As a
little background, all methods and properties in a COM object are indexed and
certain indexes are used for particular tasks. For example the zero index is used
for the default method or property.
The Default Method or Property
The method or property that has the COM index of zero is called the default
property. Visual Basic allows the programmer to not use the regular
method/property syntax when calling the default value, you can leave the
syntactical call to the method/property off all together. For example, the default
method in all collections is the Item method. If you where going to call the Item
method, you could do it like it in example 9.



为了在ASP中建立一个COM对象,你可以:

例 11:

Set Object Server.CreateObject("SMUM.XCheck.1")


给Server的CreateObject方法只传递了一个参数,就是一个ID值,这是一个由COM部件提供者给出的,唯一地标识一个COM对象的符号.为了创建一个COM对象的实例,你必须知道该对象的ID值.

有另外一种方法可以获得一个对象的实例,你可以用一个已经存在的对象实例来创建一个新的对象实例,事实上使用集合时就是这样工作的,你调用Item方法,返回了一个对象实例.