โดยค่าเริ่มต้น ATL วัตถุตัวช่วยสร้างสร้างชั้นข้อมูลเดียว มาจากCSnapInItemImplสำหรับวัตถุสแนปอิน?
ในบางกรณี คุณจำเป็นต้องใช้อย่าง น้อยหนึ่งชนิดรายการที่กำหนดเองสำหรับวัตถุสแนปอิน วิธีการที่ง่ายที่สุดคือการ คัดลอก และปรับเปลี่ยนคลาใหม่จากชั้นข้อมูลที่มีอยู่ และทำการแก้ไขบางอย่างเพิ่มเติมในโครงการ กระบวนงานนี้สามารถทำได้ในขั้นตอนที่สาม:
ขั้นตอนแรกเกี่ยวข้องกับการประกาศของชั้นข้อมูลที่มีอยู่สำหรับวัตถุ snap-in ในการคัดลอก และปรับเปลี่ยนผลลัพธ์การสร้างคลาแยกต่างหากแล้ว?
การประกาศคลาสข้อมูลสามารถพบจุดเริ่มต้นของการPROJNAMEH แฟ้มของโครงการสแนปอิน ค้นหาประกาศนี้คลาส คัดลอก และวางผลลัพธ์อยู่ใต้การประกาศแรก?
ในการประกาศวางใหม่ แทนเหตุการณ์ใด ๆ ของชื่อชั้น ด้วยชื่อของสองชั้นใหม่ เช่น ถ้าเรียกว่าคลาสข้อมูลของโครงการ CMySnapInData และคุณต้องการสร้างคลาสินค้าข้อมูลแบบกำหนดเองเรียกว่า CMyCustomSnapInData ก่อน คัดลอก และวางการประกาศของชั้นข้อมูลเริ่มต้น แล้ว ค้นหาการปรากฏของ CMySnapInData (ในส่วนวาง) และแทนที่ด้วยCMyCustomSnapInData?
นอกจากการประกาศคลาส ชั้นข้อมูลมีการประกาศ GUID และสี่คงข้อมูลสมาชิก GUID และข้อมูลสมาชิกกำหนดไว้ในตอนท้ายของการPROJNAMECPP แฟ้ม ต่อไปนี้เป็นการประกาศตัวอย่าง:
คง const GUID CProjNameGUID_NODETYPE = { 0xb386c6b, 0x8633, 0x11d1, { 0xb0, 0x8, 0x0, 0xc0, 0x4f, 0xb9, 0x94, 0x36 } };
const GUID * nbsp CProjNameData::m_NODETYPE = & CsdfdsfGUID_NODETYPE
const TCHAR * CProjNameData::m_SZNODETYPE = _T("0B386C6B-8633-11D1-B008-00C04FB99436")
const TCHAR * CProjNameData::m_SZDISPLAY_NAME = _T("Csdfdsf")
const CLSID * CProjNameData::m_SNAPIN_CLASSID = & CLSID_sdfdsf
เนื่องจากสมาชิกของข้อมูลเหล่านี้พึ่ง GUID คุณจำเป็นต้องสร้าง GUID ใหม่ (โดยใช้ GUIDGEN) ครั้งแรก แล้ว คัดลอก และวางประกาศห้า ของชั้นข้อมูลเริ่มต้น โดยตรงด้านล่าง หลังจากที่คุณได้สร้างสำเนา ปรับเปลี่ยนให้ใช้ GUID สร้างขึ้นใหม่ ตัวอย่าง การใช้ตัวอย่างรหัสก่อนหน้า และสร้างใหม่ GUID ผลลัพธ์สำหรับข้อมูลชั้นที่สองจะเป็นดังนี้:
cMyCustomSnapInGUID_NODETYPE GUID const คง = nbsp { 0x8dbeb252, 0x9201, 0x11d1, { 0xa8, 0xd6, 0x0, 0x60, 0x8, 0x93
0x8f, 0xb8 } };
const GUID * CMyCustomSnapIn::m_NODETYPE = & CMySnapInGUID_NODETYPE
CMyCustomSnapIn::m_SZNODETYPE TCHAR * const =
_T("8DBEB252-9201-11D1-A8D6-006008938FB8")
const TCHAR * CMyCustomSnapIn::m_SZDISPLAY_NAME = _T("CMyCustomSnapIn")
const CLSID * CMyCustomSnapIn::m_SNAPIN_CLASSID = & CLSID_MyCustomSnapIn
หลังจากการปรับเปลี่ยนเหล่านี้จะสมบูรณ์ มีขั้นตอนที่หนึ่งทางซ้าย: ปรับเปลี่ยนแฟ้มรีจิสทรีสำหรับวัตถุสแนปอิน?
วัตถุประสงค์ของการRGS แฟ้มการ ลงทะเบียนวัตถุสแนปอินและส่วนประกอบทั้งหมดได้ เนื่องจากคุณได้เพิ่มรายการชั้นข้อมูลที่กำหนดเอง คุณจำเป็นต้องปรับเปลี่ยนอยู่RGS แฟ้มการลงทะเบียนคลาสนี้เกินไป?
หมายเหตุnbsp GUID คุณสร้างในขั้นตอนก่อนหน้านี้ถูกนำมาใช้ในขั้นตอนนี้(&N)?
มีอยู่สองพื้นที่ในนั้นคุณจำเป็นต้องปรับเปลี่ยนแฟ้ม RGS ทั้งสองอย่างสามารถหาได้อย่างรวดเร็ว โดยการค้นหา NodeTypes คำสำคัญ?
เกิดขึ้นครั้งแรกที่อยู่ภายใต้การ NoRemove Snapins ส่วน ในการซ้อน NodeTypes ส่วน เพิ่ม GUID ใหม่ทันทีหลังจากมีอยู่ การใช้ GUID รูปแบบเดียวกันเป็นที่มีอยู่?
เหตุการณ์ที่สองอยู่ใน NoRemove NodeTypes ส่วน คัดลอกรหัสพบในส่วนนี้ วางข้อความนั้นในทันทีหลังจาก และเปลี่ยน GUID อ้างอิง GUID ของชั้นแบบกำหนดเอง?
นี้เสร็จสิ้นการปรับเปลี่ยนของโครงการสแนปอิน หลังจากคอมไพล์ประสบความสำเร็จ คุณจะมีชนิดรายการที่กำหนดเองใหม่?