CComObjectRootEx

templatelt คลาสThreadModel(&L) gt
คลา CComObjectRootEx: CComObjectRootBase สาธารณะ(&G)

พารามิเตอร์

ThreadModel

ชนชั้นมีวิธีใช้แบบจำลอง threading ที่ต้องการ คุณสามารถเลือกแบบ threading ได้อย่างชัดเจน โดยการตั้งค่าThreadModel CComSingleThreadModel, CComMultiThreadModelหรือCComMultiThreadModelNoCS คุณสามารถยอมรับเธรดแบบจำลองการเริ่มต้นของเซิร์ฟเวอร์ ด้วยการตั้งค่าThreadModelเป็นCComObjectThreadModelหรือCComGlobalsThreadModel?

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

ต้องการสืบทอดคลาสที่ใช้เซิร์ฟเวอร์ COM จากCComObjectRootExหรือCComObjectRoot?

หากคำจำกัดความของคลาสระบุแมโคDECLARE_POLY_AGGREGATABLE , ATL สร้างอินสแตนซ์ของCComPolyObjectltCYourClass >เมื่อเรียกว่าIClassFactory::CreateInstance ในระหว่างการสร้าง ค่าของไม่ทราบภายนอกมีการตรวจสอบ ถ้าเป็นNULL, IUnknownถูกนำมาใช้สำหรับวัตถุ nonaggregated ถ้าไม่ทราบภายนอกไม่ใช่NULL, IUnknownถูกนำมาใช้สำหรับวัตถุรวม?

ถ้าชั้นของคุณไม่ได้ระบุแมโคDECLARE_POLY_AGGREGATABLE , ATL สร้างอินสแตนซ์ของCComObjectltCYourClass >สำหรับการรวมวัตถุหรืออินสแตนซ์ของCComAggObject <CYourClass> nonaggregated วัตถุ?

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

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

ถ้าวัตถุของคุณจะรวม IUnknownถูกนำมาใช้ โดยCComAggObjectหรือCComPolyObject เรียนเหล่านี้มอบหมายเรียกQueryInterface, AddRefและรุ่นCComObjectRootExของOuterQueryInterface, OuterAddRefและOuterReleaseเพื่อส่งต่อไปยังไม่ทราบภายนอก โดยทั่วไปแล้ว คุณแทนCComObjectRootEx::FinalConstructในชั้นเรียนของคุณในการสร้างวัตถุใด ๆ รวม และแทนที่CComObjectRootEx::FinalReleaseกับวัตถุใด ๆ รวมฟรี?

ถ้าวัตถุของคุณจะรวมIUnknownถูกนำมาใช้ โดยCComObjectหรือCComPolyObject ในกรณีนี้QueryInterface, AddRefและเผยแพร่ไปยังจะมอบการCComObjectRootExของInternalQueryInterface, InternalAddRefและInternalReleaseเพื่อดำเนินการตามแท้จริง?

#รวม lt;atlcom.h>

สมาชิกของคลาส

ดูเพิ่มเติมnbspCComAggObject, CComObject, CComPolyObject(&N)

Index