การเพิ่มจุดเชื่อมต่อไปยังวัตถุ
ATL บทช่วยสอนเกี่ยวกับการสาธิตวิธีสร้างตัวควบคุมที่ มีการสนับสนุนสำหรับจุดเชื่อมต่อ วิธีการเพิ่มเหตุการณ์ และวิธีการใช้การเชื่อมต่อ point.nbsp IConnectionPointImplกล่าวถึงวิธีใช้จุดเชื่อมต่อ ATL(&N)?
การใช้จุดเชื่อมต่อ คุณมีสองตัวเลือก:
-
การใช้งานของคุณเองแหล่งเหตุการณ์ out-going (จุดเชื่อมต่อ)?
-
ติดต่อกับจุดเชื่อมต่อกำหนดไว้ในไลบรารีชนิดอื่นที่นำมาใช้ใหม่?
ในกรณีใด ช่วยสร้างจุดเชื่อมต่อใช้ไลบรารีชนิดทำงาน?
หมายเหตุnbsp เมื่อใดก็ ตามที่คุณเพิ่มวิธีการ dispinterface ที่คุณมีอยู่แล้วใช้จุดเชื่อมต่อ คุณต้อง recompile แฟ้ม.idl และจากนั้น ทำตามขั้นตอนในการเพิ่มจุดเชื่อมต่อไปยังตัวควบคุมหรือวัตถุ(&N)?
เมื่อต้องการเพิ่มจุดเชื่อมต่อตัวควบคุมหรือวัตถุ
-
กำหนดเป็น dispinterface ในบล็อกไลบรารีของแฟ้ม.idl ถ้าคุณเลือกกล่องกาเครื่องหมายจุดเชื่อมต่อการสนับสนุนในแท็บแอตทริบิวต์ของตัวช่วยสร้างวัตถุ ATL, dispinterface จะถูกสร้าง ถ้าคุณไม่ได้เช็คกล่องกาเครื่องหมายจุดเชื่อมต่อการสนับสนุนคุณต้องด้วยตนเองเพิ่ม dispinterface ในแฟ้ม.idl ต่อไปนี้คือ ตัวอย่างของการ dispinterface อินเทอร์เฟซที่ขาออกไม่ต้องมี อินเทอร์เฟซการสรุปข้อมูล แต่ภาษาสคริปต์หลายภาษาเช่น VBScript และ JavaScript ต้องนี้ ดังตัวอย่างนี้ใช้สอง dispinterfaces:
ไลบรารี DProjLib { importlib("stdole32.tlb") importlib("stdole2.tlb")[ uuid(57BC50F0-780B-11d1-8C44-0060083E866C), helpstring ("เพื่อน" เหตุการณ์) ] dispinterface DBuddyEvents { คุณสมบัติ: วิธี: };
ใช้โปรแกรมอรรถประโยชน์ uuidgen.exe หรือ guidgen.exe เพื่อสร้าง GUID?
-
เพิ่มการ dispinterface เป็น [เริ่มต้น แหล่ง] อินเทอร์เฟซในที่ coclass สำหรับ object.nbsp อีกครั้ง ถ้าคุณเลือกกล่องกาเครื่องหมายจุดเชื่อมต่อการสนับสนุนในแท็บแอตทริบิวต์ของตัวช่วยสร้างวัตถุ ATL สำหรับตัวควบคุมนี้ ตัวช่วยสร้างจะสร้าง [เริ่มต้น แหล่ง] รายการ เมื่อต้องการเพิ่มรายการนี้ด้วยตนเอง เพิ่มบรรทัดเป็นตัวหนา(&N):
coclass เพื่อน { อินเทอร์เฟซ [เริ่มต้น] IBuddy[เริ่มต้น แหล่ง] dispinterface DBuddyEvents;}
ดูแฟ้ม.idl ในการ Circ ATL ตัวอย่างตัวอย่างเช่น?
-
ใช้ClassViewเพื่อเพิ่มวิธีการและคุณสมบัติของอินเทอร์เฟซสำหรับเหตุการณ์?
-
หลังจากที่ dispinterface ครบกำหนด คอมไพล์แฟ้ม.idl โดยคลิกขวาแฟ้ม.idl ในFileViewและ option.nbsp คอมไพล์ การเลือก นี้จะสร้างไลบรารีชนิด(&N)?
-
คลิกขวาที่ชั้นในClassViewและเลือกใช้จุดเชื่อมต่อ... กล่องโต้ตอบจะแสดงอย่าง น้อยหนึ่งชนิดไลบรารีแท็บ และแต่ละแท็บจะแสดงในอินเทอร์เฟซสำหรับ library.nbsp ชนิดที่ ถ้าคุณเลือกอินเทอร์เฟซ และกดOKคุณจะ(&N):
-
สร้างแฟ้มหัวกับคลาสพร็อกซีมีเหตุการณ์ที่ใช้รหัสที่จะทำให้การโทร out-going สำหรับเหตุการณ์?
-
เพิ่มรายการลงในแผนผังจุดเชื่อมต่อ?
-
เพิ่มข้อคิดเห็นและ #error (จะแจ้งให้คุณแทนพารามิเตอร์ NULL ด้วยอยู่ของ dispID) ลงในรายการพารามิเตอร์IProvideClassInfo2Impl?
ถ้าคุณไม่ได้สร้างไลบรารีชนิดของคุณ คุณจะเห็นรายการของ typelibs ทั้งหมดบน computer.nbsp คุณควรใช้เฉพาะ typelibs เหล่านี้อย่างใดอย่างหนึ่งเพื่อกำหนดจุดเชื่อมต่อของคุณถ้าคุณต้องการใช้อินเทอร์เฟซขาออกที่เดียวแน่นอนพบใน typelib ที่อื่น ถ้าคุณสร้างใน typelib กับไม่มีอินเทอร์เฟซแหล่งเริ่มต้นในการ coclass กล่องโต้ตอบจะแสดงข้อความเตือนการรายงานอินเทอร์เฟซไม่เหมาะสม (แหล่งข้อมูล) ในไลบรารีชนิด(&N)?
การใช้จุดเชื่อมต่อมาจากไลบรารีชนิดของวัตถุอื่น
-
ในClassViewคลิกขวาบนคลาสที่ใช้แมโคBEGIN_COM_MAPและเลือกจุดเชื่อมต่อใช้จากเมนูทางลัด?
-
ในกล่องโต้ตอบการใช้การเชื่อมต่อจุดคลิกเพิ่ม Typelib...?
-
เลือกจากหนึ่งใน libraries.nbsp มีชนิด หลังจากที่คุณเลือกไลบรารีชนิด คุณจะเห็นรายการของอินเทอร์เฟซพร้อมใช้งานในไลบรารีชนิด(&N)?
-
เลือกอย่างน้อยหนึ่งอินเทอร์เฟซการมีอยู่ และคลิกตกลง?
-
แก้ไขไฟล์.idl ไปอย่างใดอย่างหนึ่ง:
-
การคัดลอก dispinterface จากแฟ้ม idl สำหรับวัตถุถูกใช้เหตุการณ์แหล่ง?
-
ใช้คำสั่งimportlibในไลบรารีชนิด?
นี่คือตัวอย่างจากไฟล์.idl ที่ใช้จุดเชื่อมต่อจากตัวควบคุม Circ?
[
uuid(38BBFD91-7575-11D1-8C3C-0060083E866C)
version(1.0)
helpstring (" 16190 1.0 ไลบรารีชนิด")
]
ไลบรารี MY16190Lib
{
importlib("stdole32.tlb")
importlib("stdole2.tlb")
importlib("D:\\ATL25\\samples\\circ\\circ.tlb") / / **** เพิ่ม[บรรทัดนี้
uuid(38BBFD9E-7575-11D1-8C3C-0060083E866C)
helpstring ("Atl16190Ctl Class")
]
coclass Atl16190Ctl
{
อินเทอร์เฟซ [เริ่มต้น] IAtl16190Ctl
[เริ่มต้น แหล่ง] dispinterface _CircEvents / / **** และหนึ่งนี้
};
}