|
一句話先理解: COM 組件 = 微軟在 Windows 世界里“最小的可復(fù)用軟件零件”, 它以“二進(jìn)制標(biāo)準(zhǔn)”形式存在,任何語言(VB6、C++、Delphi、腳本……)只要遵守 COM 約定就能創(chuàng)建或調(diào)用它。 下面拆開說明: 1. COM 是什么 · Component Object Model(組件對象模型),1993 年推出。 · 不是語言,不是庫,而是一種規(guī)范: – 規(guī)定內(nèi)存布局(v-table) – 規(guī)定生命周期(AddRef / Release) – 規(guī)定接口查詢(QueryInterface) – 規(guī)定注冊與定位(CLSID、ProgID、注冊表) · 結(jié)果是:編譯后的 .dll 或 .exe 里包含一個或多個 COM 類,別的程序通過 GUID 就能“即插即用”。 2. 在 VB6 中的具體形態(tài) · ActiveX DLL / ActiveX EXE / ActiveX OCX 都是 COM 組件。 · 你在 VB6 IDE 里: – “工程類型”選 “ActiveX DLL” → 編譯后就是 COM DLL。 – 勾選 “工程屬性 → 線程模型” → 決定組件是單線程/單元線程。 · 編譯完后 `regsvr32 MyDll.dll` 把 CLSID 寫進(jìn)注冊表,別人就能引用或 `CreateObject("MyProj.MyClass")`。 3. 一個最小示例 (1)新建 ActiveX DLL 工程:
``` ' Class1.cls Public Function Add(a As Long, b As Long) As Long Add = a + b End Function ``` (2)工程名設(shè)為 “Calc”,類名保持 “Class1”。 (3)編譯 → Calc.dll (4)在另一個 VB6 標(biāo)準(zhǔn) EXE 里使用:
``` Dim c As New Calc.Class1 MsgBox c.Add(3, 4) ' 彈出 7 ``` 4. 與“中間件”關(guān)系 · COM 組件常作為中間件層: – 把業(yè)務(wù)邏輯封裝到 COM DLL,供 ASP、VB6、VBA、C++ 同時調(diào)用。 – 通過 DCOM 還能跨進(jìn)程/跨機(jī)器,成為分布式中間件。 · 所以 VB6 時代所謂“三層架構(gòu)”: 前端(VB6 EXE) ? COM 業(yè)務(wù)組件 ? 數(shù)據(jù)庫。 5. COM+、DCOM、.NET 后續(xù) · COM+(2000):加入事務(wù)、對象池、事件服務(wù)等“企業(yè)級”功能。 · DCOM:讓 COM 組件跨網(wǎng)絡(luò),類似早期 RPC。 · .NET 出現(xiàn)后,COM 仍然可用(Interop),但逐漸被程序集取代。 一句話總結(jié): COM 組件就是 Windows 上的“樂高積木”,VB6 用它把功能封裝成可復(fù)用、可注冊、可遠(yuǎn)程調(diào)用的二進(jìn)制模塊,因此成為當(dāng)時最常見、最輕量的中間件實現(xiàn)形式。 |
|
|
來自: yzjqrz > 《生產(chǎn)》