ثابت مقابل ديناميكي DLL تحميل مع دلفي

تعمل مكتبة DLL (مكتبة الارتباط الديناميكي) كمكتبة مشتركة من الوظائف التي يمكن استدعاؤها من قبل العديد من التطبيقات و DLL الأخرى. دلفي يتيح لك إنشاء واستخدام DLLs بحيث يمكنك استدعاء هذه الوظائف حسب الرغبة. ومع ذلك ، يجب عليك استيراد هذه الإجراءات قبل أن تتمكن من الاتصال بها.

يمكن استيراد الوظائف التي تم تصديرها من DLL بطريقتين - إما عن طريق الإعلان عن إجراء خارجي أو وظيفة (ثابتة) أو عن طريق المكالمات المباشرة إلى وظائف API الخاصة بـ DLL (ديناميكية).

دعونا نفكر في DLL بسيط. يوجد أدناه رمز تصدير "circle.dll" لوظيفة واحدة تسمى "CircleArea" ، والذي يحسب مساحة الدائرة باستخدام نصف القطر المحدد:

بمجرد الحصول على Circle.dll ، يمكنك استخدام وظيفة "CircleArea" التي تم تصديرها من التطبيق الخاص بك.

تحميل ثابت

إن أبسط طريقة لاستيراد إجراء أو دالة هي التصريح باستخدام التوجيه الخارجي:

إذا قمت بتضمين هذا الإعلان في جزء الواجهة من الوحدة ، يتم تحميل Circle.dll مرة واحدة عند بدء تشغيل البرنامج. طوال تنفيذ البرنامج ، تتوفر وظيفة CircleArea لجميع الوحدات التي تستخدم الوحدة حيث يوجد الإعلان أعلاه.

تحميل ديناميكي

instagram viewer

يمكنك الوصول إلى إجراءات في مكتبة من خلال مكالمات مباشرة إلى Win32 APIs ، بما في ذلك مكتبة, مكتبة مجانيةو GetProcAddress. تم إعلان هذه الوظائف في Windows.pas.

إليك كيفية استدعاء دالة CircleArea باستخدام التحميل الديناميكي:

عند الاستيراد باستخدام التحميل الديناميكي ، لا يتم تحميل DLL حتى استدعاء LoadLibrary. تم تفريغ المكتبة من قبل دعوة إلى FreeLibrary.

مع التحميل الثابت ، يتم تحميل DLL وتنفيذ أقسام التهيئة قبل تنفيذ أقسام التهيئة لتطبيق الاستدعاء. يتم عكس ذلك مع التحميل الديناميكي.

يجب عليك استخدام ثابت أو ديناميكي؟

فيما يلي نظرة بسيطة على مزايا وعيوب تحميل DLL الثابت والديناميكي:

تحميل ثابت

الإيجابيات:

  • أسهل لمطور مبتدئ ؛ لا "قبيح" مكالمات API.
  • يتم تحميل ملفات DLL مرة واحدة فقط ، عند بدء تشغيل البرنامج.

سلبيات:

  • لن يبدأ تشغيل التطبيق في حالة فقد أي ملفات DLL أو تعذر العثور عليها. ستظهر رسالة خطأ مثل هذا: "فشل هذا التطبيق في البدء لأنه لم يتم العثور على 'مفقود.dll'. إعادة تثبيت التطبيق قد حل هذه المشكلة". حسب التصميم ، يتضمن ترتيب بحث DLL مع ارتباط ثابت الدليل الذي منه التطبيق تم تحميل دليل النظام ودليل Windows والأدلة المدرجة في بيئة PATH متغير. لاحظ أيضًا أن ترتيب البحث قد يختلف باختلاف إصدارات Windows. نتوقع دائمًا أن يكون لديك جميع مكتبات DLL في الدليل حيث يوجد تطبيق الاستدعاء.
  • يتم استخدام المزيد من الذاكرة حيث يتم تحميل جميع ملفات DLL حتى إذا لم تستخدم بعض الوظائف

تحميل ديناميكي

الإيجابيات:

  • يمكنك تشغيل البرنامج حتى في حالة عدم وجود بعض المكتبات التي يستخدمها.
  • استهلاك ذاكرة أصغر حيث يتم استخدام ملفات DLL عند الحاجة فقط.
  • يمكنك تحديد المسار الكامل لـ DLL.
  • يمكن استخدامها للتطبيقات المعيارية. يكشف التطبيق فقط (تحميل) وحدات (DLLs) "المعتمدة" للمستخدم.
  • القدرة على تحميل وإلغاء تحميل المكتبة ديناميكيًا ، هي أساس نظام مكون إضافي يسمح للمطور بإضافة وظائف إضافية للبرامج.
  • التوافق العكسي مع إصدارات Windows القديمة التي قد لا تدعم فيها DLLs للنظام نفس الوظائف أو يمكن دعمها بنفس الطريقة. يتيح لك اكتشاف إصدار Windows أولاً ، ثم الربط ديناميكيًا بناءً على ما يعمل تطبيقك ، دعم المزيد إصدارات من نظام التشغيل Windows وتوفير الحلول لأنظمة التشغيل الأقدم (أو على الأقل تعطيل الميزات التي لا يمكنك تعطيلها برشاقة الدعم.)

سلبيات:

  • يتطلب المزيد من التعليمات البرمجية ، وهو ليس دائمًا سهلًا للمطور المبتدئ.
instagram story viewer