ดูเหมือนว่าวัตถุ COM เป็นวัตถุใช้งานทั่วไปที่ควบคุมโดยระบบปฏิบัติการ วัตถุเป็นไปตามอินเทอร์เฟซที่เข้มงวดและอนุญาตให้คุณสอบถามวัตถุเพื่อกำหนดข้อมูล นี่คือวัตถุ COM หรือไม่?
ดูเหมือนว่าวัตถุ COM เป็นวัตถุใช้งานทั่วไปที่ควบคุมโดยระบบปฏิบัติการ วัตถุเป็นไปตามอินเทอร์เฟซที่เข้มงวดและอนุญาตให้คุณสอบถามวัตถุเพื่อกำหนดข้อมูล นี่คือวัตถุ COM หรือไม่?
คำตอบ:
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 ทั้งหมดได้รับการลงทะเบียนกับระบบเมื่อติดตั้ง หากโปรแกรมเมอร์ต้องการใช้ส่วนประกอบบางอย่างเขาจำเป็นต้อง:
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 จึงล้าสมัยไปอย่างช้าๆ
COM เป็นกลไกที่พัฒนาขึ้นเพื่อให้ผู้ใช้สามารถแจกจ่ายไบนารีที่สามารถนำมาใช้ซ้ำได้แม้ว่าผู้โทรจะใช้คอมไพเลอร์ C ++ ของผู้ขายรายอื่นหรือ (ท้ายที่สุด) เป็นภาษาอื่นโดยสิ้นเชิง
หากคุณต้องการแนะนำที่ดีใน COM อ่านCOM จำเป็นโดยกล่องดอน