טעינה עם סטטי מול דינמי עם דלפי

קובץ ה- DLL (ספריית קישור דינמי) פועל כספריה משותפת של פונקציות שניתן לקרוא אליהם על ידי יישומים רבים ו- DLLים אחרים. דלפי מאפשרת לך ליצור ולהשתמש ב- DLLs כך שתוכל להתקשר לפונקציות אלה כרצונך. עם זאת, עליך לייבא שגרות אלה לפני שתוכל להתקשר אליהם.

ניתן לייבא פונקציות שיוצאו מ- DLL בשתי דרכים - אם על ידי הצהרת נוהל או פונקציה חיצוניים (סטטיים) או באמצעות שיחות ישירות לפונקציות API ספציפיות ל- API (דינמיות).

הבה נבחן DLL פשוט. להלן הקוד עבור "cirkel.dll" המייצא פונקציה אחת, המכונה "CircleArea", המחשבת את שטח המעגל באמצעות הרדיוס הנתון:

ברגע שיש לך את המעגל.dll, אתה יכול להשתמש בפונקציה המיוצאת "CircleArea" מהיישום שלך.

טעינה סטטית

הדרך הפשוטה ביותר לייבא נוהל או פונקציה היא להכריז על כך באמצעות ההנחיה החיצונית:

אם תכלול הצהרה זו בחלק הממשק של יחידה, cirkel.dll נטען פעם אחת עם הפעלת התוכנית. לאורך כל ביצוע התוכנית הפונקציה CircleArea זמינה לכל היחידות המשתמשות ביחידה שבה ההצהרה שלעיל.

טעינה דינמית

אתה יכול לגשת לשגרה בספריה באמצעות שיחות ישירות לממשקי API של Win32, כולל LoadLibrary, FreeLibrary, ו GetProcAddress. פונקציות אלה מוצהרות ב- Windows.pas.

instagram viewer

כך מתקשרים לפונקציה CircleArea באמצעות טעינה דינמית:

בעת ייבוא ​​באמצעות טעינה דינמית, ה- DLL לא נטען עד הקריאה ל- LoadLibrary. הספרייה פורקת על ידי התקשר ל- FreeLibrary.

עם טעינה סטטית, ה- DLL נטען וקטעי האתחול שלו מופעלים לפני שמבצעים את חלקי האתחול של היישום המתקשר. זה מתהפך עם טעינה דינאמית.

האם עליך להשתמש סטטי או דינמי?

להלן מבט פשוט על היתרונות והחסרונות של טעינת ה- DLL הסטטית והדינמית כאחד:

טעינה סטטית

יתרונות:

  • קל יותר למפתח מתחיל; לא "מכוער" שיחות API.
  • קבצי DLL נטענים רק פעם אחת, עם הפעלת התוכנית.

חסרונות:

  • היישום לא יתחיל אם חסרים קבצי DLL או לא ניתן למצוא אותם. הודעת שגיאה כזו תופיע: "יישום זה נכשל בהפעלה מכיוון ש- 'missing.dll' לא נמצא. התקנה מחדש של היישום עשויה לפתור בעיה זו ". על ידי תכנון, סדר החיפוש ב- DLL עם קישור סטטי כולל את הספרייה שממנה יישום טעון, ספריית המערכת, ספריית Windows וספריות הרשומים בסביבת PATH משתנה. שים לב גם כי סדר החיפוש עשוי להיות שונה בגירסאות Windows שונות. תמיד צפו להחזיק את כל קבצי ה- DLL בספרייה בה נמצא היישום המתקשר.
  • משתמשים בזיכרון נוסף מכיוון שכל קבצי ה- DLL נטענים גם אם לא תשתמש בחלק מהתפקודים

טעינה דינמית

יתרונות:

  • אתה יכול להריץ את התוכנית שלך גם כאשר חלק מהספריות בהן היא משתמשת אינן קיימות.
  • צריכת זיכרון קטנה יותר מכיוון ש- DLLs משמשים רק בעת הצורך.
  • אתה יכול לציין את הנתיב המלא ל- DLL.
  • יכול לשמש ליישומים מודולריים. היישום חושף (טוען) רק מודולים (קבצי DLL) "מאושרים" למשתמש.
  • היכולת לטעון ולפרוק ספרייה באופן דינמי, היא הבסיס של מערכת פלאגין המאפשרת למפתח להוסיף פונקציונליות נוספת לתוכניות.
  • תאימות לאחור לגירסאות ישנות של Windows בהן קבצי ה- DLL של המערכת עשויים לא לתמוך באותן פונקציות או לתמוך באותה דרך. איתור גרסת Windows תחילה, ולאחר מכן קישור דינמי על סמך פעולת האפליקציה שלך מאפשר לך לתמוך יותר גרסאות של Windows ומספקים דרכים לעקיפת הבעיה עבור מערכות הפעלה ישנות יותר (או לכל הפחות, משבית חינניות תכונות שאינך יכול תמיכה.)

חסרונות:

  • דרוש קוד נוסף, מה שלא תמיד קל למפתח מתחיל.
instagram story viewer