Dynamic-Link Library – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
הוספת קישורים מתאימים
הורדת קישורים חיצוניים בגוף הערך
שורה 28:
=== קישור יזום ===
קיימות שלוש פונקציות בסיסיות ב-API של Windows, שמאפשרות לטעון ספריות DLL באופן יזום ומבוקר. למעשה, גם שתי האפשרויות הקודמות משתמשות בפונקציות אלה באופן שקוף למפתח התוכנה. הפונקציות ממוקמות בקובץ kernel32.dll, אשר נטען למרחב הזיכרון בתהליך ה[[אתחול (מחשוב)|אתחול]] של [[חלונות]] ונשאר שם עד לכיבוי המחשב או ליציאה ממערכת ההפעלה:
* הפונקציה '''[https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibrarya LoadLibrary]''' מקבלת את המיקום המוחלט, המיקום היחסי או המיקום הסתמי שם קובץ PE (ראה בסעיף [[Dynamic-Link Library#סדר טעינה|סדר טעינה]]), טוענת אותו למרחב הזיכרון ומחזירה את הכתובת אליה הוא נטען (Base Address). הפונקציה מנהלת מנגנון Reference count, שמונע טעינה כפולה של אותו קובץ, כלומר: כאשר תוכנית קוראת לפונקציה בקובץ DLL כלשהו, הפונקציה טוענת את הקובץ רק אם הוא לא נמצא כבר בזיכרון הפיזי (דינמי). הפונקציה יכולה לקבל שם קובץ בפורמט [[Unicode]].
* הפונקציה '''[https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getprocaddress GetProcAddress]''' מחפשת כתובות של פונקציות בקובצי DLL שנמצאים במרחב הזיכרון. הפונקציה מקבלת את כתובת הבסיס של ה-DLL ואת שמה של הפונקציה שאותה רוצים לייבא. שם הפונקציה לא יכול להיות בפורמט Unicode.
* הפונקציה '''[https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-freelibrary FreeLibrary]''' משחררת את קובץ ה-DLL ממרחב הזיכרון.
כישלון באחת מהפונקציות הנ"ל מתבטא בהחזרת ערך שגיאה, איתו ניתן להתמודד באופן מבוקר באמצעות הודעה למשתמש או ניסיון לטעינת קובץ אחר (ראה [[טיפול בחריגות (תכנות)|טיפול בחריגות]]).