COM編程模型

來源:互聯網
上載者:User
概述
如果你用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方法,返回了一個對象執行個體.

例 12:

Set Object = Collection.Item(2)


例11和例12有一點是一樣的,那就是都是從別的對象建立對象,區別是,CreateObject可以建立任何類型的對象,而Item只能返回集合中的對象.就像先有雞,還是先有蛋的問題一樣,你可能要問,Server對象又是怎麼來的呢?事實上,這是內建對象.他存在於ASP當中.


內建對象
ASP中有六個內建對象,他們是:
Server
Request
Response
ObjectContext
Application
Session
這些對象與其他對象唯一不同的是,不需要建立執行個體.他們與其他對象表現得一樣,有自己的方法和屬性.因為他們是內建的,所以你不需知道他們的ID,事實上,你根本不需調用CreateObject去建立他們.

對象ID
如果你建立對象的主要方法就是調用 CreateObject 的話,知道對象的ID就非常重要了COM組件提供者在他們的文檔裡回提供對象的ID的.

(以下不譯)
The Documentation
Now that we have established the understanding between methods and properties
along with their different attributes, we need to understand how the documentation
for the objects represents these attributes. For examples, we are going to look at
15 Seconds' component section, which is in the same format as the IIS 4.0
component documentation.
Read and Write Properties
A good example of a read/write property is that of the PhoneTranslate property of
the XCheck object, shown here in example 11:

Example 13
object.PhoneTranslate[= value]
Notice the value syntax, this is the indication of a property that can be written to.
The brackets denote that the property is optional, in other words you do not need
to set the property to use the object. Click here to view the full documentation.
Read Only Properties
A good example of a read only property is the Expires property of the ASPMail
object.

Example 14
object.Expires
Notice that unlike example 11 there is not an equal symbol, indicating this is read
only. Click here to view the full documentation.
Optional Method Arguments
A good example of the optional arguments is the SendX method of the OCXMail
object. The documentation syntax can be seen here in example 12:

Example 12
object.SendX(mailserver[, fromName[, fromAddress[, priority[,
returnReceipt[, toAddressList[, ccAddressList[, bccAddressList[,
attach[, messageSubject[, messageText]]]]]]]]]])
Notice that the only required argument is the mailserver argument. All the rest,
noted by the brackets are optional. Click here to view the full documentation.
Summary
With a fundamental understanding of COM and it's abilities, coupled with good
documentation you can expand the flexibility of your Active Server page
programming. Take the information that you already know about programming IIS
objects, like Session objects and ADO, and expand on that by adding more
COM objects to your repertoire. Third party COM object will allow you to
expand your Active server applications and accomplish tasks rapidly by leveraging
the component object model.


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。