自動化(Automation)基礎概念:介面描述語言(IDL)與類型庫(TypeLib)

來源:互聯網
上載者:User
自動化(Automation)基礎概念:介面描述語言(IDL)與類型庫(TypeLib)

許式偉 (著作權聲明)
2007-4-26

在前文,我們已經解釋了:

  • 自動化(Automation)基礎概念:COM組件(Component)與介面(Interface) 
  • 自動化(Automation)基礎概念:變體(Variant)與Dispatch調用(IDispatch)  
  • 自動化(Automation)基礎概念:二次開發介面(API)與外掛程式(Addin)

接下來,讓我們來解釋兩個同樣常見的詞:

  • 介面描述語言(IDL)
  • 類型庫(TypeLib)

前文我們已經解釋了二次開發介面(API),它是應用程式用來向外部程式(或外掛程式)提供服務的。我們理一下思路:

  • 應用程式是一個EXE形式的COM組件(EXE COM Server)。
  • 應用程式對外提供介面(Interface),也就是我們通常說的二次開發介面(API)。
  • 為了支援更多的使用者,特別是支援一些指令碼語言,應用程式的二次開發介面(API)通常被設計為雙介面。

清楚了這些,剩下來的問題是:既然應用程式API是介面,是一種二進位協議,那麼,第三方如何知道應用程式提供的介面是什麼樣子的呢?這就是本文要回答的內容。

每一種語言的模組,為了可以被用來提供給其他模組調用,都有自己固有的習慣。例如,C/C++程式員很習慣對外提供一個.dll/.so,外加一個.h檔案對介面進行描述(有時還會帶上一個.lib檔案,不過這裡我們假設.dll總是提供了標準的COM組件,那麼.lib是不需要的)。

為了是的應用程式提供的介面可以讓更多人可以使用,為了使任意語言的程式員能彼此理解對方,理解對方的API介面(DOM模型的對象樹),就需要有統一的規範。我們需要藉助一種中繼語言對介面進行描述,這就是介面描述語言(IDL)的由來。

那麼類型庫(TypeLib)又是什麼呢?有人說,類型庫(TypeLib)是IDL編譯後的結果,IDL是基於純文字的,可以方便人們閱讀,而類型庫(TypeLib)是二進位的,方便機器處理。

這麼說當然沒有錯。但是並沒有解釋類型庫(TypeLib)存在的價值。

我個人認為,類型庫(TypeLib)最重要的作用是充當了元資訊(Meta)的作用,你可以認為這是一種正常化的RTTI。從此意義上來講,我們不難明白,為什麼MS認為.NET是COM的延續 —— 類型庫(TypeLib)所能夠描述的元資訊(Meta)仍然不夠豐富,語言之間的壁壘仍然存在。

類型庫(TypeLib)的主要作用在於:

  • RTTI - 為運行時刻動態獲得某種對象介面的元資訊(Meta)提供可能。通過類型庫(TypeLib),你可以很輕鬆獲得類(或介面)的種種資訊,如:

    • 類名 
    • 基類
    • 方法列表(包括方法的原型,方法的名稱)
    • 屬性列表(包括屬性的類型,屬性的名稱)
    • 等等
  • 通過這種RTTI,為程式員提供各種服務。例如:
    • 自動實現雙介面中的IDispatch介面。
    • Visual BasicIntegration Environment(或其他IDE環境)提供的自動完成(只要你載入了TypeLib)。
    • 根據TypeLib進行自動代碼產生(如MFC程式可以匯入一個TypeLib自動為其產生相應的C++標頭檔/Wrapper原始碼)等。
  • 由於類型庫(TypeLib)包含了介面的完整資訊,它一定程度上起到取代IDL或.h檔案的作用。考慮到TypeLib可以作為應用程式的資源存在,這樣我們發布程式的時候,就不需要無謂再帶上IDL或者提供額外的.h檔案。

相信你已經很清楚IDL和TypeLib這兩個重要概念了。我這裡提供一個CodeGuru(這裡作了修正。抱歉,我記憶成CodeProject了)上的一個常式結束本文。該程式枚舉類型庫(TypeLib)中的資訊,並將其列印出來,略微改變一下,應該可以做出一個實際可用的應用程式。相信有人需要,希望對你有協助。到這裡下載:TypeLibEnum.rar。 

補充:如果你只是要查看類型庫(TypeLib)——事實上,多數人屬於這種情況,而不是編程對它進行操作,那麼你可以:

  • 通過Visual Studio(我知道VS 6.0版本有,更高版本未確認)帶的OLE View(全稱是OLE/COM Object Viewer)進行查看。File菜單下有View TypeLib...選項。當然哪些已經註冊到系統的TypeLib,已經直接列出來了。
  • 通過Microsoft提供的各種物件瀏覽器查看。物件瀏覽器在很多MS的產品中都帶了,例如Visual Basic 6.0,包含VBA支援的應用程式(如Word/Excel/PowerPoint等等),Visual Studio 2005,等等。

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.