ثابت مقابل مكتبة الارتباط الديناميكي تحميل

ثابت مقابل مكتبة الارتباط الديناميكي تحميل


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

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

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

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

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

تحميل ثابت

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

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

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

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

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

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

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

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

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

تحميل ثابت

الايجابيات:

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

سلبيات:

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

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

الايجابيات:

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

سلبيات:

  • يتطلب المزيد من الكود ، وهو أمر ليس سهلاً على الدوام للمطورين المبتدئين.


تعليقات:

  1. Redman

    بيننا نقول.

  2. Reymond

    في رأيي ، إنه سؤال مثير للاهتمام ، سأشارك في المناقشة. معا نستطيع أن نتوصل إلى الإجابة الصحيحة.

  3. Majdy

    الجواب المهم وفي الوقت المناسب

  4. Kern

    أهنئ ، لقد تمت زيارتك بفكرة رائعة ببساطة

  5. Tygorr

    يا لها من عبارة رائعة

  6. Durant

    أعتقد أن الأخطاء ارتكبت. أنا قادر على إثبات ذلك. اكتب لي في رئيس الوزراء ، يتحدث إليك.

  7. Bursuq

    رسالة لا مثيل لها ، أنا مهتم جدًا :)

  8. Zero

    أؤكد. أنا متفق على كل ما سبق. يمكننا التواصل حول هذا الموضوع. هنا أو في PM.



اكتب رسالة