從OLE到COM、Automation、ActiveX技術

//2002/2/3
//酷小毅
一、 COM基本概論
1. 什麼是COM(Component Object Model).
COM,在幾年前幾乎就已經微軟對於所開發軟體使用的一種標準,COM的前身其實就是微軟在1993年推出的OLE2,OLE(Object Linking and Embeded)物件的連結與崁入,為早期一種復合式文件技術,能單一的文件(也可說是物件)內崁連結另一份文件的技術,這已經是一種物件間連結溝通的一種協定的技術,當時有人稱為OLE Control,ActiveX,因為增早期對這些名詞的制定過於寬鬆,加上許多人很難區分出什麼是OLE什麼是ActiveX,其實它們指的都是以COM為基礎的技術。
COM是建構軟體的一種標準,在Win32下是行程與行程間溝通的一種基準,一種協定,COM是一種以物件導向(OOP)為基礎,是一個以二進位重複使用(Binary Reuse)為基礎的架構,這意味著COM不但發揮OOP的長處,二進位重複使用使COM並不需要任何原始程式碼就可重複使用,所以只要是支援COM的程式它們只要了解介面即可相互溝通不需寮解對方的實作以及使用何種程式語言。
2. COM以介面為基礎的設計方式
以介面為基礎的程式設計方式可說是COM的精神,此部份觀念相當重要,觀念了解了在談如何充分發揮以介面為基礎程式設計的好處。
  •  介面的構成(TypeLibrary)
TypeLib為COM定義介面(Interface)一種二進位構成檔,TypeLib中定義了此COM物件中的Class(CoClass),方法(Method)及屬性(Property),TypeLib可為單獨的一個檔案(可能是.OLB或.TLB,.OLB檔案則為.TLB的前身,為早期的COM物件),也可能和.OCX或.DLL或.EXE Bind在一起。
  •  IDL(Interface Definition Lenguage)簡介
一個COM的Client在RunTime時連結到一個Object,但是它再編譯時還是得要告訴他COM Server提供給他什麼樣的方法屬性等,那COM當然要提供一個描述COM Interface及CoClass的一種標準,因介面是要被公開的,當然那就是IDL語言,既然COM就是要達到語言的獨立性,表示不管是任何程式語言都可以利用IDL來設計所需的Interface及Coclass,IDL為一般文字檔,須以Microsoft IDL編譯器編譯過行成二近為可重複使用的檔案→即前面所提之TypeLib。

clip_image002

  • 如何觀看TypeLib中的Interface and CoClass定義的屬性及方法

(1).使用Visual Studio的OLE View,下面利用OLE View開啟一個筆者的範例程式教大家如何使用OLE View觀看此元件提供哪些介面屬性方法等,以及用OLE View還原成IDL語言。如左圖中我們開啟一個筆者的PrjTestMessage的DLL,接著到圖二看看。


clip_image002[6]

(2).在下圖中可以看到在PrjTestMessage中有一個名為TestMessage的CoClass,
這個CoClass中有一個介面叫ItestMessage,介面中有TestMessage的屬性及
ShowTestMsg這個方法。而旁邊則為此元件透過OLE View所反組譯出的IDL語言,通常C++的程式師會自行撰寫COM物件所需的IDL加以編譯,而VB則會自動幫你建立一個Class所需的IDL定義並在Compile時連結加入ActiveX Exe或ActiveX DLL中,或是.OCX Control中。

留言

這個網誌中的熱門文章

軟體架構設計:API 設計準則(二)、API Design-First 原則、策略與開發流程

什麼是 gRPC ?

常見的程式碼壞味道(Code Smell or Bad Smell)