แมโครเหล่านี้ป้อนอินเทอร์เฟซของวัตถุลงในแผนที่ของ COM เพื่อให้สามารถเข้าโดยQueryInterface ลำดับของรายการในแผนที่ COM เป็นอินเทอร์เฟซใบสั่งจะมีการตรวจสอบสำหรับการจับคู่IIDระหว่างQueryInterface?
แต่ละวัตถุที่ต้องการเปิดเผยของอินเทอร์เฟซผ่านQueryInterfaceต้องมีแผนที่ COM ของตนเอง แผนที่ COM เริ่มทำงานกับแมโคBEGIN_COM_MAP อินเทอร์เฟซรายการจะถูกเพิ่มเข้ากับอย่างน้อยหนึ่งอย่างแมโคCOM_INTERFACE_ENTRYและแผนที่เสร็จสมบูรณ์ ด้วยแมโคEND_COM_MAP ตัวอย่างเช่น:
BEGIN_COM_MAP(CMyObject)
nbsp COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMyObject)
END_COM_MAP ()(&N)
ดู ATL COMMAPตัวอย่างสำหรับตัวอย่างที่ใช้ COM ชนิดต่าง ๆ แมปรายการแมโคร?
หมายเหตุรายการแรกในแผนที่ COM ต้องเป็นอินเทอร์เฟซบนวัตถุประกอบด้วยการแมป COM ดังนั้น คุณไม่สามารถเริ่มรายการของแผนที่ COM กับCOM_INTERFACE_ENTRY_CHAINซึ่งทำให้แผนที่ COM ของวัตถุแตกต่างกันเพื่อต้องการค้นหาจุด ที่COM_INTERFACE_ENTRY_CHAIN (COtherObject)ปรากฏในแผนที่ COM ของวัตถุได้ ถ้าคุณต้องการค้นหาแผนที่ COM ของวัตถุอีกครั้งแรก เพิ่มรายการอินเทอร์เฟซสำหรับIUnknownแผนที่ของคุณ COM โยงแผนที่ COM ของวัตถุอื่น ๆ ตัวอย่างเช่น:
BEGIN_COM_MAP(CThisObject)
nbsp COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(COtherObject)
END_COM_MAP ()(&N)
ข้อควรระวังnbsp เป็นของรุ่นที่ 3.0, ATL ใช้คำสำคัญคอมไพเลอร์__uuidof ( คลา )เพื่อขอรับ IID สอดคล้องกันสำหรับคลาสที่กำหนด เนื่องจากการเปลี่ยนแปลงในแมโคCOM_INTERFACE_ENTRYมีประสิทธิภาพในเวอร์ชัน 3.0 ตอนนี้คุณเพียงแค่ใส่หัวข้อสำหรับอินเทอร์เฟซการใช้ แทนยัง เชื่อมโยงไปยังไลบรารีที่กำหนด iid ของตรงกันสำหรับอินเทอร์เฟซที่ การเปลี่ยนแปลงนี้สามารถทำให้เกิดปัญหา หากหัวข้อก่อนหน้านี้ได้ถูกสร้าง โดย MIDL รุ่นเก่า หรือจะถูกเข้า รหัสมือ และไม่ทำเครื่องหมายอย่างเหมาะสม ถ้ามีการทำเครื่องหมายการประกาศสำหรับอินเทอร์เฟซในหัวข้อที่ไม่ มีที่เกี่ยวข้อง__declspec (จากuuid )นั้นใดพยายามที่ใช้คำสำคัญ__uuidofสำหรับอินเทอร์เฟซที่จะล้ม คุณสามารถเปลี่ยนกลับไปแมโคCOM_INTERFACE_ENTRY (ATL 2.x) เก่า ด้วยการกำหนด_ATL_NO_UUIDOFในการตั้งค่าของคุณสร้างเมื่อต้องการแก้ปัญหาลักษณะการทำงานใหม่(&N)?
ต่อไปนี้เป็นรายการที่พร้อมใช้งานแมโครใน:
COM ผังรายการแมโคร