电竞比分网-中国电竞赛事及体育赛事平台

分享

如何理解com組件?

 yzjqrz 2025-07-26 發(fā)布于廣東

一句話先理解:


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)形式。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多