templatelt คลาส Base >
คลาส CComTearOffObject : สาธารณะ Base
พารามิเตอร์
Base
ของคุณฉีกออกคลาส มาจากCComTearOffObjectBaseและอินเทอร์เฟซคุณต้องการให้วัตถุฉีกออกเพื่อสนับสนุน?
ATL ใช้อินเตอร์เฟซของฉีกออกในระยะที่สอง CComTearOffObjectBaseวิธีจัดการการนับจำนวนการอ้างอิงและQueryInterfaceในขณะที่ใช้CComTearOffObject IUnknown?
CComTearOffObjectใช้ส่วนติดต่อแบบฉีกออกเป็นวัตถุที่ถูกสร้างอินสแตนซ์เท่านั้นเมื่อมีการร้องถามว่า อินเทอร์เฟซสำหรับ แยกต่างหาก ฉีกออกจะถูกลบเมื่อจำนวนของการอ้างอิงกลายเป็น ศูนย์ โดยทั่วไปแล้ว คุณสร้างอินเทอร์เฟซการฉีกออกสำหรับสำหรับอินเทอร์เฟซที่ไม่ค่อยใช้ เนื่องจากใช้แบบฉีกออกบันทึกตัวชี้ vtable ในอินสแตนซ์ทั้งหมดของวัตถุหลักของคุณ?
คุณควรได้สืบทอดมาของชั้นนำฉีกออกจากCComTearOffObjectBaseและ จากอินเทอร์เฟซการใดที่คุณต้องการฉีกออกวัตถุเพื่อสนับสนุน CComTearOffObjectBaseเป็น templatized เจ้าของชั้นเรียนและแบบเธรด เรียนเจ้าของเป็นคลาสของวัตถุซึ่งการฉีกออกเป็นการดำเนินการ ถ้าคุณไม่ระบุรูปแบบเธรด แบบเธรดการเริ่มต้นใช้?
คุณควรสร้างแผนที่ COM สำหรับคลาสคุณฉีกออก เมื่อ ATL instantiates ฉีกออก มันจะสร้างCComTearOffObjectltCYourTearOffClass >หรือCComCachedTearOffObject <CYourTearOffClass>?
ในตัวอย่าง BEEPER ตัวอย่าง การ CBeeper2 ชั้นคือ ชั้นฉีกออกและ CBeeper ชั้นคือ ชั้นเจ้า:
คลา CBeeper2: ISupportErrorInfo สาธารณะ
nbsp สาธารณะ CComTearOffObjectBase <CBeeper>
{
สาธารณะ:
CBeeper2() {}
STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
{
กลับ (InlineIsEqualGUID(IID_IBeeper,riid))
S_OK: S_FALSE
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
คลา CBeeper:
สาธารณะ IDispatchImpl < IBeeper และ IID_IBeeper และ LIBID_BeeperLib >
CComObjectRoot สาธารณะ
สาธารณะ CComCoClass < CBeeper และ CLSID_Beeper >
{
สาธารณะ:
CBeeper()
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY_TEAR_OFF (IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
...
}
#รวม lt;atlcom.h>
ดูเพิ่มเติมnbspCComCachedTearOffObject(&N)