2009-05-04 107 views
6

我不能籠絡這些術語之間的差異。COM/OLE/ActiveX/IDispatch混淆

COM和ActiveX同義詞嗎?

ActiveX對象只是一個公開IDispatch的COM對象嗎?

許多較舊的MSDN頁面提到沒有任何COM上下文的IDispatch。它是否有單獨的歷史記錄,並且剛剛在其生命週期後期的COM'保護傘'下引入?

OLE在哪裏適合?在MFC命名和MSDN中是否存在(相當多) - 都只是遺留問題?

Wikipedia給出了一些見解,但不是很多。我找不到更深入的參考資料。

回答

7

找到一些報價從COM Programming by Example

你很快就會與 COM發現的另一件事情是,市場有一個實地考察 一天的術語。而不是 幫助促進了解, 你會發現在大多數情況下,它促進 的神祕。 ... OLE,ActiveX,Remotable 對象 - 哪一個意思是這個 周? ...

COM演變出解決一個 特定的問題 - 如何讓一個字 處理器編輯電子表格在 信,而無需退出 字處理器做它的用戶。這個 解決方案被稱爲OLE。 ......然而, 與OLE(OLE2)的第二個版本, 它的創造者修改OLE32.DLL到 暴露更多的OLE的基本功能 以便其API可用於 允許任何應用程序接取的 另一個功能。這個API,自1993年以來沒有太大變化, 被認爲是COM API。 ...

一旦COM API被曝光後, 微軟用它來創造什麼是 然後叫OLE控件允許 複雜的控制(例如,按鈕 是螺旋,列表框發揮 音樂)用Visual C++是 可通過Visual Basic 應用程序訪問。最終使用相同的技術 允許控制器 被下載並被您的網絡瀏覽器 使用。此時,名稱 更改爲ActiveX控件或僅用於純粹用於營銷 原因的 純ActiveX。雖然您可以將任何 功能封裝在ActiveX控件中,但它的需求已被 專門用於支持用戶接口控制。

我仍然對最後一句話感到好奇 - COM對象是否必須滿足一些額外的要求才能作爲ActiveX控件? - 但它足以讓它走了。

感謝您的回答!

+1

「必須滿足某些COM對象滿足一些額外要求才有資格成爲ActiveX控件」是的。不過,我不確定它們是什麼。這可能只是它必須實現一些特定的接口。 – 2009-05-05 15:44:48

+1

這沒有嚴格的規範。即使是文檔,當ActiveX控件沒有實現接口時,容器也應該很好地降級。 – 2010-08-16 20:09:06

+0

ActiveX控件的原始規範具有在Internet Explorer和/或Visual Basic中使控件有用所需的接口。但是隨着時間的推移,這些接口組發生了變化,應用程序更容忍丟失的接口,所以最終支持COM IUnknown接口的任何東西都可以被認爲是一個ActiveX組件。 – 2015-04-24 19:47:20

4

雖然ActiveX通常用於GUI對象「ActiveX控件」的上下文中,但ActiveX是COM的市場營銷工具。

IDispatch是一個由COM對象實現的接口,以便客戶端程序可以在運行時動態調用其方法(遲綁定),而不是在編譯時所有的方法和參數類型都需要在時間。

OLE是COM的早期版本。

1

關於OLE:COM的根源在於OLE。但是今天,OLE可能被認爲是建立在COM之上,並且主要用於顧名思義 - 文檔鏈接和嵌入。雖然COM本身只定義了幾個接口(IUnknown,IClassFactory,IMalloc等),但OLE增加了一大堆附加接口,如IMoniker,IOleItemComtainer等。

總結:COM是基礎,ActiveX和OLE在COM之上是層。

+0

我目前正在研究一個相似的主題,在此期間我找到了兩個可能在此處很有用的鏈接:http://msdn.microsoft.com/zh-cn/library/aa751972(v=vs.85).aspx #ActiveX_Controls '...換句話說,一個控件至少是一些支持IUnknown接口的COM對象,它也是自注冊的'http://support.microsoft.com/kb/159621/en -us – juniper 2011-11-08 19:11:27