ในตอนท้ายของส่วนที่สองของบทช่วยสอนนี้ เราประสบปัญหาเล็กน้อย แต่จริงๆ แล้วนั่นเป็นปัญหาใหญ่ หากเรามีเวลา ประเด็นนี้น่าจะคุ้มค่ากับความพยายามของเราในการศึกษา
จำได้ไหมว่าเราประสบปัญหานั้นได้อย่างไร ในเวลานั้น เรารวบรวม ActiveXDLL ก่อน จากนั้นจึงรวบรวมโปรแกรมทดสอบที่ใช้ DLL ต่อไป เราจะคอมไพล์ DLL ใหม่ โดยสมมติว่าเนื้อหาของ DLL จำเป็นต้องได้รับการแก้ไข อย่างไรก็ตาม เมื่อฉันรันโปรแกรมทดสอบอีกครั้ง เกิดข้อผิดพลาด!
ใช่ มันไม่สามารถเป็นเช่นนั้นได้อย่างแน่นอน
เพราะประสบการณ์บอกเราว่านี่คือปัญหาความเข้ากันได้ ดังนั้นจึงสามารถจัดการได้ดังนี้:
เริ่ม Visual Basic และเปิดโครงการ Northwind
เลือกเมนู "โครงการ" -> "NorthwindProperties"
คลิกแท็บ "ส่วนประกอบ"
เมื่อเรียกดูเนื้อหาหน้า "VersionCompatibility" คุณจะพบสามตัวเลือก ให้ฉันอธิบายตอนนี้:
NoCompatibility - ทุกครั้งที่คุณคอมไพล์ คอมโพเนนต์ COM ของผู้ใช้จะถูกทำเครื่องหมายด้วยแท็กใหม่ ซึ่งหมายความว่าโปรแกรมจะสามารถใช้ได้เฉพาะแท็กเก่า (เวอร์ชันก่อนหน้า) ของ DLL เท่านั้น
ProjectCompatibility - คอมโพเนนต์ COM ของผู้ใช้จะไม่ถูกทำเครื่องหมายด้วยแท็กใหม่ทุกครั้งที่คอมไพล์ หากเป็นเช่นนั้น แอปพลิเคชันใดๆ ที่ใช้อยู่ในปัจจุบันจะล้มเหลว ที่จริงแล้ว สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อโปรเจ็กต์ปัจจุบันแตกต่างอย่างมากจากโปรเจ็กต์ DLL ที่คอมไพล์แล้ว
ความเข้ากันได้แบบไบนารี - แต่ละครั้งที่มีการคอมไพล์ แอปพลิเคชันจะพยายามบันทึกแท็ก DLL ที่คอมไพล์ไว้ก่อนหน้านี้เสมอ ดังนั้นจึงมั่นใจได้ว่าแอปพลิเคชันที่ใช้จะไม่มีหน้าจอสีน้ำเงินแห่งความตาย อย่างไรก็ตาม หาก DLL ปัจจุบันที่จะคอมไพล์แตกต่างจาก DLL ที่คอมไพล์ก่อนหน้านี้มากเกินไป แท็กใหม่จะถูกทำเครื่องหมาย
มาทดสอบอาร์กิวเมนต์ข้างต้นกัน:
เปิดโปรแกรมทดสอบจากส่วนก่อนหน้าของบทช่วยสอนนี้
คอมไพล์ใหม่
ทดลองใช้งานและควรจะทำงานได้ตามปกติ
เปิดโครงการ ActiveXDLL
ตั้งค่าคุณสมบัติเป็น BinaryCompatibility
คอมไพล์ DLL ใหม่
ลองใช้โปรแกรมทดสอบและน่าจะทำงานได้ดี
ตกลง ดูเหมือนว่าปัญหาได้รับการแก้ไขแล้ว แต่เมื่อคอมไพล์ DLL ใหม่ นักพัฒนาส่วนใหญ่จะตกอยู่ในสถานการณ์ที่เข้ากันไม่ได้อื่น
ไม่มีวิธีแก้ปัญหาที่ดีกว่านี้เหรอ? พักปัญหานี้ไว้ก่อน!
คุณสามารถเยี่ยมชมเว็บไซต์ต่อไปนี้เพื่อดูเนื้อหาเพิ่มเติม:
www.PylonOfTheMonth.co.uk.->