1996 年 3 月,微軟為了在網頁瀏覽器戰爭中對抗 Java Applet,推出了「ActiveX」品牌。其核心靈感源自 OLE (Object Linking and Embedding) 技術,目標是打造「可從網路快速下載、可重複使用的軟體元件」。初期口號為「Activate the Internet」,隨著技術成熟,ActiveX 迅速演變為一套完整的可重複使用元件技術規範,涵蓋從網頁元素到完整應用程式元件的各層面,成為當時 Windows 平台開發的核心潮流。
ActiveX 的底層架構建立在 COM (Component Object Model) 之上。COM 定義了二進制層級的物件互通標準,解決了不同程式語言、不同編譯器產生的模組如何協作的問題。OLE 則是建立在 COM 之上的應用層協議(如複合文件、拖放、視覺化編輯)。ActiveX 控制項本質上就是實作了特定介面(如 IUnknown, IDispatch, IConnectionPointContainer 等)的 COM 物件。
微軟提供的開發工具(Visual C++、Visual Basic、ATL、MFC)大幅屏蔽了 COM 複雜的參考計數、介面查詢、編組等細節,讓開發者專注於商業邏輯。
ActiveX 不只是「控制項」,它是一個元件技術家族:
一個標準的 ActiveX 控制項必須實作:
IDispatch 介面:定義所有屬性、方法,支援晚期繫結(腳本語言呼叫)。IConnectionPointContainer / IConnectionPoint:實作事件觸發機制,容器透過建議連接點接收事件通知。IPersistStreamInit, IPersistStorage, IPersistPropertyBag 等,負責狀態儲存與載入。| 優勢 | 代價/挑戰 |
|---|---|
| 二進制相容性:升級元件無需重編譯呼叫端(介面不變即可) | 效能開銷:跨程序/跨機器呼叫需編組,進程內呼叫仍有虛函數表查找成本 |
| 語言無關:C++、VB、JavaScript、VBScript 皆可開發/使用 | 部署複雜性:需註冊至系統登錄檔,版本衝突 (DLL Hell) 風險高 |
| 豐富的工具鏈:MFC/ATL/Wizard 自動生成樣板碼 | 安全性限制:IE 後期嚴格限制 ActiveX 執行,需簽章、標記 Safe for Scripting/Initialization |
| 模組化升級:單獨替換控制項 DLL 即可修復 Bug 或新增功能 | 平台鎖定:原生僅限 Windows,跨平台需借助 Wine 或 ActiveX 控制項移植層 |
雖然 HTML5、WebAssembly、Electron、PWAs 等現代技術已取代 ActiveX 在網頁端的統治地位,但在企業內部系統、工業控制軟體、醫療資訊系統、舊版 ERP/CRM 增模組等領域,ActiveX 控制項仍大量存在。理解其架構原理,對於維護舊系統、進行技術遷移、或設計新一代元件模型(如 COM 的現代替代者 WinRT/.NET Core)都具有重要參考價值。
ActiveX 是 COM 技術在視覺化元件領域的集大成者。它以 IDispatch 實現自動化,以 IConnectionPoint 實現事件,以持久化介面實現狀態管理,並仰賴容器提供運行環境。雖然時代已變,但其「介面導向、二進制相容、語言中立」的設計哲學,依然是現代微服務、gRPC、Web Components 等架構的靈感來源之一。