في نهاية الجزء الثاني من هذا البرنامج التعليمي، واجهنا مشكلة صغيرة، لكنها في الواقع مشكلة كبيرة، لنكون صادقين. وإذا كان لدينا الوقت، فإن هذه القضية تستحق أن نبذل جهدنا في دراستها.
تذكر كيف واجهنا هذه المشكلة؟ في ذلك الوقت، قمنا أولاً بتجميع ملف ActiveXDLL ثم قمنا بتجميع برنامج الاختبار الذي يستخدم ملف DLL. بعد ذلك، نقوم بإعادة ترجمة ملف DLL، على افتراض أن محتويات DLL تحتاج إلى تعديل. ومع ذلك، عندما أقوم بتشغيل برنامج الاختبار مرة أخرى، يحدث خطأ!
نعم، بالتأكيد لا يمكن أن يكون الأمر كذلك.
لأن التجربة تخبرنا أن هذه مشكلة توافق. لذا، يمكن التعامل مع الأمر على النحو التالي:
ابدأ تشغيل Visual Basic وافتح مشروع Northwind؛
حدد قائمة "PRoject"->"NorthwindProperties"؛
انقر فوق علامة التبويب "المكون"؛
بتصفح محتوى صفحة "توافق الإصدار"، يمكنك العثور على ثلاثة خيارات. اسمحوا لي أن أشرح الآن:
NoCompatibility - في كل مرة تقوم فيها بالتجميع، يتم وضع علامة على مكون COM الخاص بالمستخدم بعلامة جديدة، مما يعني أن البرنامج يمكنه فقط استخدام العلامة القديمة (الإصدار السابق) لملف DLL.
توافق المشروع - لا يتم دائمًا تمييز مكونات COM الخاصة بالمستخدم بعلامة جديدة في كل مرة يتم تجميعها فيها. إذا كان الأمر كذلك، فستفشل أي تطبيقات مستخدمة حاليًا. في الواقع، لن يحدث هذا إلا إذا كان المشروع الحالي مختلفًا بشكل كبير عن مشروع DLL المترجم.
التوافق الثنائي - في كل مرة يتم تجميعها، يحاول التطبيق دائمًا حفظ علامة DLL التي تم تجميعها مسبقًا، وبالتالي ضمان أن التطبيق المستخدم لن يحتوي على شاشة موت زرقاء. ومع ذلك، إذا كانت مكتبة الارتباط الحيوي (DLL) الحالية التي سيتم تجميعها مختلفة جدًا عن مكتبة الارتباط الحيوي (DLL) المترجمة مسبقًا، فسيتم وضع علامة جديدة عليها.
دعونا نختبر الحجة المذكورة أعلاه:
افتح برنامج الاختبار من الجزء السابق من هذا البرنامج التعليمي؛
إعادة ترجمتها؛
قم بإجراء اختبار تجريبي له وسيعمل بشكل طبيعي؛
افتح مشروع ActiveXDLL؛
قم بتعيين الخاصية الخاصة به على BinaryCompatibility؛
إعادة ترجمة DLL؛
قم بتجربة برنامج الاختبار وسيعمل بشكل جيد.
حسنًا، يبدو أن المشكلة قد تم حلها. ولكن عند إعادة ترجمة DLL، سيقع معظم المطورين في حالة عدم توافق أخرى.
أليس هناك حل أفضل؟ دعونا نضع هذه القضية جانبا الآن!
يمكنك زيارة المواقع التالية لمزيد من المحتوى:
www.PylonOfTheMonth.co.uk.->