การใช้ CComObject, CComAggObject และ CComPolyObject

เรียนแม่CComObject, CComAggObjectและCComPolyObjectจะคลาสที่ได้รับมากที่สุดในการสืบทอดกันเสมอ เป็นความรับผิดชอบจัดการวิธีการทั้งหมดในIUnknown: QueryInterface, AddRefและRelease นอกจากนี้CComAggObjectและCComPolyObject (เมื่อใช้สำหรับรวมวัตถุ) ให้อ้างอิงพิเศษนับและสัมพันธภาพระหว่างคำQueryInterfaceที่จำเป็นสำหรับการไม่ทราบภายใน?

ว่าCComObject, CComAggObjectหรือCComPolyObjectใช้ขึ้นอยู่กับว่าคุณประกาศแมโคDECLARE_POLY_AGGREGATABLEและว่าวัตถุของคุณจะถูกรวมอยู่:

ประโยชน์ของการใช้CComAggObjectและCComObjectคือว่า การใช้งานIUnknownสุดสำหรับชนิดของวัตถุที่ถูกสร้างขึ้น ตัวอย่าง วัตถุที่ nonaggregated เท่านั้นต้องนับเป็นการอ้างอิง ในขณะที่ต้องการวัตถุรวมทั้งจำนวนที่ใช้ในการอ้างอิงสำหรับการไม่ทราบภายในและตัวชี้ไปยังไม่ทราบภายนอก?

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

แมโคDECLARE_POLY_AGGREGATABLEถูกเพิ่มโดยอัตโนมัติให้คำจำกัดความของคลาส โดยตัวช่วยสร้างวัตถุ ATL เมื่อคุณสร้างตัวควบคุมแบบเต็มหรือควบคุม Internet Explorer ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวช่วยสร้างสร้างโครงการ ATL?

Index