讀好文章,快速理解COM元件知識,10分鐘深刻閱讀,獲得超過2000元的培訓 (轉)

amyz發表於2007-11-16
讀好文章,快速理解COM元件知識,10分鐘深刻閱讀,獲得超過2000元的培訓 (轉)[@more@]

[新浪漫架構原創]Robin和你學習COM

原文地址:ng.vicp/cgi-bin/topic.cgi?forum=5&topic=2139">
幻燈地址:/comstudy.htm">
論壇地址:
新浪漫架構:

相信很多學習的同行們都對COM技術感到非常難見其底,我希望能夠為您指點一下方向。

COM= 模型。

在中,COM元件需要存在在 .dll或 .exe中,這些檔案是他們的載體。
所以可以知道在.dll,.exe中,都可以存在任意個COM元件,至於程式外,程式內這些
概念不是COM的主要概念,我不談。

每一個COM元件又可以包含若干個物件,這些物件可以是實現了物件,也可以是永遠都在
升級的物件(一個物件都是一個可以實現特定功能的程式碼+資料的包),如果一個物件
的功能不打算再升級,就可以直接在這個物件內實現功能,如果不是這樣,好比 .9
word.10,等等,物件的功能會升級,那麼你可以讓訪問這個物件的訪問一個介面,而這個介面可以知道升級了的物件實現程式碼。(介面在自己的元件內,所以它應該而且必須知道具體版本的物件的實際地址)

看這個圖

1
我要傳送電子------&gt[傳送電子郵件功能]
(這裡的功能一旦完成了,就永遠不能更改了)

2
我要傳送電子郵件-----&gt[呼叫傳送電子郵件功能介面--&gt版本1]
......................[........................|->版本2]
......................[........................|->版本3]
......................[........................|->版本4]
......................[........................|->版本5]

COM元件和C++的物件的不同點是 C++的物件是被直接載入到中執行的,在執行之前,
沒有這個物件。C++物件不告訴別人它在哪裡,她自己找到記憶體中某一段地址,然後就
在那裡,等著創作這個物件的程式設計師自己寫的程式呼叫。如果別人試圖呼叫這個物件,就
必須自己找到物件的地址,然而不可能找到,沒有人知道在哪裡。

而COM元件中的物件是存在在.dll,.exe檔案中的,它是以二進位制的形式存在在中。
試圖呼叫物件的其他程式設計師可以使用COM執行環境呼叫先載入這個.dll,.exe檔案到記憶體中,
然後元件物件自己會把自己的地址資訊告訴COM執行環境。
(要想使用COM元件功能,操作必須能夠執行COM執行環境,這個東西是一個殼子,
把記憶體中的COM物件包在裡面執行,這個執行環境在使用COM物件前載入到記憶體中,它自己
也是.dll檔案)

看這個圖:
客戶程式

看出和C++物件的區別了吧?

COM元件物件一到記憶體中,就告訴COM執行環境它自己的一些資訊,比如
1 地址 IUNKnown介面 告訴各個物件,,介面的入口地址。
2 被訪問的次數,當這個數為0時,COM執行環境可以選擇在某個時候從記憶體中
 銷燬這個物件
3 其它資訊

這裡談到了一個關鍵資訊,就是不同功能的COM物件可以選擇告訴COM執行環境不同的
資訊,多少可以自己決定,但是如果你想成為更高階的COM物件,比如,
比如COM+物件,比如DCOM物件,比如自動化物件

至於如何告訴COM執行環境這些資訊,都是事先說好的,你必須在這些介面中來提供
資訊,這些預先說好的東西整個合起來就是COM元件規範。
比如:IDispatch提供自動化資訊。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982794/,如需轉載,請註明出處,否則將追究法律責任。

相關文章