COM (Component Object Model) โดยสรุปคืออะไร? [ปิด]


89

ดูเหมือนว่าวัตถุ COM เป็นวัตถุใช้งานทั่วไปที่ควบคุมโดยระบบปฏิบัติการ วัตถุเป็นไปตามอินเทอร์เฟซที่เข้มงวดและอนุญาตให้คุณสอบถามวัตถุเพื่อกำหนดข้อมูล นี่คือวัตถุ COM หรือไม่?

c++  com 

คำตอบ:


112

COMเป็นกลไกที่อนุญาตให้นำอ็อบเจ็กต์กลับมาใช้ซ้ำ (หรือมากกว่าคอมโพเนนต์) โดยไม่ขึ้นกับภาษาที่ใช้โดยโปรแกรมเมอร์ที่ใช้คอมโพเนนต์และโปรแกรมเมอร์ที่ใช้งานและไม่ขึ้นอยู่กับว่าคอมโพเนนต์นั้นถูกนำไปใช้ในโปรแกรมของไคลเอ็นต์หรือไม่ ที่อื่นบนเครื่อง (หรือเครือข่าย)

กล่าวโดยกว้างส่วนประกอบ COM แต่ละส่วนมีการใช้งานอินเทอร์เฟซหนึ่งหรือหลายอินเทอร์เฟซ อินเตอร์เฟซผู้ที่มีการกำหนดในลักษณะที่เป็นภาษากลางที่ใช้อินเตอร์เฟซภาษานิยาม (IDL) ตัวอย่างเช่นหนึ่งในอินเทอร์เฟซพื้นฐานใน COM ที่IUnknownถูกกำหนดไว้เช่นนี้:

interface IUnknown
{
   virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
   virtual ULONG AddRef(void) = 0;
   virtual ULONG Release(void) = 0;
};

อินเทอร์เฟซเล็ก ๆ นี้เป็นพื้นฐานใน COM เนื่องจากคอมโพเนนต์ COM แต่ละตัวต้องใช้งานได้ กำหนดลักษณะสำคัญสองประการของเครื่องจักร COM:

  • QueryInterfaceอนุญาตให้เรียกรหัสเพื่อนำไปใช้กับอินเทอร์เฟซที่รู้จัก ใน COM อินเทอร์เฟซอ้างอิงโดย GUID (หรือที่เรียกว่า Interface Identifiers, IID) หากออบเจ็กต์ใช้อินเทอร์เฟซหลายอย่างนั่นคือวิธีที่โค้ดไคลเอ็นต์ได้รับการอ้างอิงไปยังแต่ละอินเทอร์เฟซ มันทำหน้าที่เป็นตัวดำเนินการคัดเลือกหากคุณต้องการ
  • AddRef()และRelease()ใช้กลไกการจัดการหน่วยความจำสำหรับวัตถุ COM ตามชื่อของพวกเขาโมเดลที่พบมากที่สุดคือกลไกการนับอ้างอิงซึ่งอินสแตนซ์จะถูกทำลายหลังจากไคลเอนต์คนสุดท้ายปล่อยการอ้างอิงไป

คอมโพเนนต์ COM ทั้งหมดได้รับการลงทะเบียนกับระบบเมื่อติดตั้ง หากโปรแกรมเมอร์ต้องการใช้ส่วนประกอบบางอย่างเขาจำเป็นต้อง:

  • ตรวจสอบให้แน่ใจว่าส่วนประกอบได้รับการติดตั้งในตำแหน่งที่เข้าถึงได้ เวลาส่วนใหญ่อยู่ในระบบของแอปพลิเคชันที่ทำงานอยู่ แต่ COM + ยังอนุญาตให้มีส่วนประกอบบนคอมพิวเตอร์ระยะไกล
  • รู้ GUID ของส่วนประกอบที่กำหนด ด้วย GUID นี้ไคลเอนต์สามารถขอให้ระบบสร้างอินสแตนซ์ของคอมโพเนนต์ได้ (ใน C เรียกฟังก์ชันนี้CoCreateInstance()) คุณสามารถดูในรีจิสทรีภายใต้HKEY_CLASSES_ROOT\CLSID: GUID แต่ละรายการในนั้น (ส่วนใหญ่อาจเป็น) ตัวระบุสำหรับคอมโพเนนต์ COM หรืออินเทอร์เฟซและรายการด้านล่างคีย์นั้นจะบอกระบบว่าควรอินสแตนซ์

เครื่องจักร COM มีความซับซ้อนมาก ตัวอย่างเช่นการใช้งานหรือการใช้คอมโพเนนต์ COM ใน C ต้องใช้งานจำนวนมาก แต่ภาษาระดับสูงกว่าเช่น Visual Basic ได้ทำหลายอย่างเพื่อให้ง่ายต่อการใช้งานและการใช้คอมโพเนนต์ COM ประโยชน์มากน้อยเพียงไร ช่วยให้สามารถเขียนแอปพลิเคชันใน Visual Basic ได้ แต่ยังคงใช้อัลกอริทึมที่สำคัญต่อประสิทธิภาพใน C หรือ C ++ เป็นวัตถุ COM ซึ่งสามารถใช้ได้โดยตรงจากโค้ด VB ระบบจะดูแลอาร์กิวเมนต์การเรียกเมธอดแบบมาร์แชลโดยส่งผ่านเธรดกระบวนการและการเชื่อมต่อเครือข่ายตามความจำเป็นเพื่อให้โค้ดไคลเอ็นต์มีการแสดงผลเหมือนการใช้อ็อบเจ็กต์ปกติ

ส่วนประกอบพื้นฐานหลายอย่างของ Windows ใช้ COM ตัวอย่างเช่น Windows Explorer (ตัวจัดการไฟล์) นั้นเป็นเชลล์ว่างเปล่า มันกำหนด COM Interfaces จำนวนมากสำหรับการนำทางและการแสดงลำดับชั้นแบบทรีและโค้ดทั้งหมดที่แสดง "My Computer" ไดรฟ์โฟลเดอร์และไฟล์จะเป็นชุดของคอมโพเนนต์ COM ที่ใช้อินเทอร์เฟซเหล่านั้น

ด้วยการถือกำเนิดของ. NET COM จึงล้าสมัยไปอย่างช้าๆ


10
แหล่งที่มาของบรรทัดสุดท้าย?
Shad

32

COM เป็นกลไกที่พัฒนาขึ้นเพื่อให้ผู้ใช้สามารถแจกจ่ายไบนารีที่สามารถนำมาใช้ซ้ำได้แม้ว่าผู้โทรจะใช้คอมไพเลอร์ C ++ ของผู้ขายรายอื่นหรือ (ท้ายที่สุด) เป็นภาษาอื่นโดยสิ้นเชิง

หากคุณต้องการแนะนำที่ดีใน COM อ่านCOM จำเป็นโดยกล่องดอน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.