فایل DLL چیست؟ انواع، کاربرد و راه حل ارورهای رایج
سیستمعامل ویندوز از جهات بسیاری مورد توجه کاربران و علاقهمندان دنیای کامپیوتر قرار دارد. بعضی کاربران، شیفتهی سرعت و کارایی این سیستمعامل در کامپیوتر و لپ تاپ های گوناگون هستند و عدهای دیگر، رابط کاربری ساده و قابل فهم ویندوز را ستایش میکنند. بههرحال اگر بخواهیم ویژگیهای جذاب و پیشرفتهی ویندوز را توضیح دهیم، از اصل مطلب که در مورد فایلهای DLL است، جا میمانیم.
آیا میدانستید اکثر عملکردهای اصلی و حیاتی ویندوز توسط فایلهای کوچکی موسوم به «کتابخانهی پیوند پویا» یا همان DLL ارائه میشوند؟ این فایلها نهتنها نقش بنیادی در سیستمعامل بر عهده دارند، بلکه بسیاری از نرمافزارهای شخص ثالث و حرفهای برای اجرا و عملکرد درست، از فایلهای DLL استفاده میکنند.
برای درک راحتتر موضوع و آشنایی بهتر با فایلهای DLL، به نرمافزاری مانند فوتوشاپ فکر کنید. این نرمافزار، برای پیادهسازی ابزارهای کاربردیاش از تعداد زیادی ماژول نرمافزاری استفاده میکند و هریک از این ماژولها در قالب یک فایل DLL طراحی و توسعه یافتهاند.
فایل DLL چیست؟
یک فایل DLL (مخفف Dynamic Link Library) در واقع کتابخانهی نرمافزاری شامل کدها و دادههایی است که به طور همزمان توسط یک یا چند برنامه مورد استفاده قرار میگیرند. اساساً دلیل بهکارگیری واژهی Dynamic، اشاره به «دسترسی به محتوای این فایلها از طریق فراخوانی برنامهها» است. به عبارت دیگر، این فایلها بهطور همیشگی در حافظه وجود ندارند و تنها هنگام فراخوانی توسط برنامههای مختلف به حافظهی اصلی منتقل میشوند.
همانطور که گفته شد، فایلهای DLL با اهداف مختلف طراحی و توسعه مییابند. برای مثال، یکی از پرکاربردترین DLLهای ویندوز، Comdlg32 نام دارد. وظیفهی اصلی این فایل DLL، نمایش پیغام (دیالوگباکس) به کاربر است.
بخشهای مختلف سیستمعامل یا نرمافزارهای شخص ثالث با استفاده از این DLL میتوانند دیالوگباکس مورد نظرشان را به کاربر نمایش دهند. همانطور که میبینید، کدها و توابع مربوط به نمایش دیالوگباکس فقط یکبار نوشته شدهاند اما بارها توسط نرمافزارهای مختلف مورد استفاده قرار میگیرند.
یک نکتهی جالب در مورد فایلهای DLL آن است که این فایلها برخلاف فایلهای EXE قابلیت اجرای مستقل توسط کاربر را ندارند و فقط مخصوص «فراخوانی» در سیستمعامل یا نرمافزارهای دیگر طراحی شدهاند. فرمت اصلی فایلهای DLL همان .dll است اما این نوع فایلها با فرمتهای دیگر نظیر .OCX (فایلهای مربوط به ActiveX)، .CPL (فایلهای مربوط به کنترلپنل) و .DRV (فایلهای مربوط به درایورهای سختافزاری) هم توسعه مییابند.
کاربرد فایلهای DLL
فایلهای DLL ذاتاً ماژولار هستند. با توجه به اینکه در سیستمهای ماژولار، هر ماژول فقط در مواقع نیاز فراخوانی میشود، نرمافزارهای متکی به فایلهای DLL، سرعت اجرای بالاتری نسبت به سایر نرمافزارها دارند؛ چراکه هنگام اجرا و راهاندازی نرمافزار، تمام ماژولهای آن به طور یکجا بارگذاری نمیشوند.
علاوهبر مورد فوق، فرآیند بهروزرسانی نرمافزارهای مبتنیبر DLL بسیار سادهتر و سریعتر از سایر نرمافزارها صورت میگیرد. دلیل این امر، امکان بهروزرسانی بخشهای کوچک سیستم و جلوگیری از اعمال تغییرات خیلی بزرگ در کل سیستم است. برای مثال، فرض کنید میخواهید نحوهی محاسبهی مالیات در یک نرمافزار حسابداری را تغییر دهید. به لطف فایلهای DLL، کافی است فقط فایل DLL مربوط به محاسبهگر مالیات را بهروز کنید.
به طور کلی، ابداع و بهرهگیری از فایلهای کوچک و کاربردی DLL یک استراتژی چندوجهی و موفق بهحساب میآید. به لطف این فایلها، اموری نظیر «ماژولارسازی کدها»، «امکان استفادهی چندباره از کدها» و «بهینهسازی مصرف حافظه» بهراحتی امکانپذیر میشوند.
این آرایش زیبا و مهندسیشدهی فایلهای DLL در معماری سیستمعامل، موجب افزایش چشمگیر سرعت بارگذاری و اجرای نرمافزارهای سیستمی و شخص ثالث میشود. با بهرهگیری نرمافزارها از ساختار ماژولار فایلهای DLL، سرعت و بهرهوری سیستمعامل و سایر برنامهها افزایش یافته و در عین حال، میزان مصرف حافظه تا حد قابل توجهی کاهش مییابد.
تا اینجا، مزایای فایلهای DLL را نوشتیم اما این بدان معنا نیست که فایلهای مذکور هیچ نقطهضعفی ندارند و بیعیبونقص هستند. یکی از ویژگیهای فایلهای DLL، امکان توسعهی آنها بر اساس سایر فایلهای DLL است. به عبارت دیگر، برنامهنویسان هنگام نوشتن یک فایل DLL میتوانند از توابع پیادهسازیشده در سایر فایلهای DLL هم استفاده کنند.
با بهرهگیری از این تکنیک، هرگونه تغییر در فایلهای استفادهشده در DLL مورد نظر میتواند موجب عدم کارکرد درست آن DLL و در نتیجه، عدم پایداری این نوع فایلها شود. بنابراین بزرگترین نقطهضعف فایلهای DLL، امکان وقوع مشکلاتی در فراخوانی، بهروزرسانی یا اعمال تغییرات در این گونه فایلها است.
انواع فایل های DLL
فراخوانی فایلهای DLL درون برنامههای شخص ثالث از دو طریق امکانپذیر است: پیوند پویا هنگام بارگذاری (موسوم به LDLL) و پیوند پویا هنگام اجرا (موسوم به RDLL). در زیر، این دو روش را به طور کامل توضیح دادهایم:
- پیوند پویا هنگام بارگذاری: در این روش، برنامهها برای استفاده از فایلهای DLL، آنها را مانند توابع محلی فراخوانی میکنند. چنانچه میخواهید از این نوع فراخوانی در برنامههایتان استفاده کنید، هنگام کامپایل و لینک برنامه، باید یک فایل هدر (با فرمت .h) و یک فایل کتابخانه (با فرمت .lib) را وارد کنید. با انجام این کار، سیستمعامل متوجه میشود که این فایلهای DLL باید هنگام بارگذاری نرمافزار اجرا شوند.
- پیوند پویا هنگام اجرا: در این روش، برنامهها برای استفاده از فایلهای DLL باید عملکردهای LoadLibrary و LoadLibraryEx را فراخوانی کنند. بعد از فراخوانی موفق DLL مورد نظر، حالا باید با استفاده از عملکرد GetProcAddress، آدرس مربوط به DLL مورد نظر را وارد کنید. توجه داشته باشید که هنگام استفاده از این روش، نیازی به وارد کردن فایل کتابخانه (با فرمت .lib) نیست.
چرا فایل DLL کار نمیکند؟
همانطور که در بخشهای قبل اشاره شد، بسیاری از عملکردهای اصلی سیستمعامل ویندوز به فایلهای DLL وابسته هستند و در نتیجه سلامت این فایلها از اهمیت بالایی برخوردار است. در چنین شرایطی، پاک شدن یا خرابی فایلهای DLL، ناسازگاری آنها با نسخهی سیستمعامل و همچنین ویروسی شدن این نوع فایلها میتواند عملکرد کلی سیستمعامل و برنامههای آن را تحت تأثیر قرار دهد. در زیر، بعضی از شایعترین مشکلات مربوط به فایلهای DLL را توضیح دادهایم:
- خطای DLL not found: همانطور که از عنوان آن بر میآید، این خطا زمانی رخ میدهد که سیستمعامل یا برنامههای آن نتوانند به DLL مورد نظرشان دسترسی داشته باشند. معمولاً پاک شدن یا تغییر نام و مکان فایلهای DLL از دلایل اصلی وقوع خطای DLL not found هستند.
- خطای DLL is missing: این خطا دقیقاً مشابه خطای DLL not found است.
- خطای DLL is corrupt: این خطا معمولاً زمانی رخ میدهد که فایلهای DLL مورد نیاز سیستمعامل یا برنامههای شخص ثالث دچار خرابی یا آسیبدیدگی شده باشند. این موضوع میتواند به دلایل گوناگون مانند «ویروسی شدن سیستمعامل»، «مشکلات سختافزاری» و «تداخلات نرمافزاری» رخ دهد.
- خطای DLL is outdated: این خطا معمولاً زمانی رخ میدهد که فایل DLL با نسخهی سیستمعامل یا نرمافزارهای نصبشده روی آن سازگاری نداشته باشد.
راه حل ارورهای رایج فایل های DLL
هرگز فایلهای DLL را از سایتهای متفرقه دانلود نکنید! بعضی سایتها فایلهای ویروسی را در اختیار کاربران قرار میدهند و این برای امنیت سیستمعامل و فایلهای شما خطرناک است.
- ۱. ریستارت کامپیوتر: خوشبختانه در بسیاری از مواقع، مشکلات مربوط به فایلهای DLL موقتی هستند و با خاموش و روشن کردن کامپیوتر میتوان آن را برطرف کرد. چنانچه مشکل فایل DLL شما جدیتر است و بدون حل آن، ویندوز بالا نمیآید، کامپیوتر را به روش سختافزاری ریستارت کنید.
- ۲. بازگردانی فایلهای پاکشده از سطل آشغال: از آنجا که اغلب ارورهای مربوط به فایلهای DLL از نوع «DLL Not Found» و «Missing DLL» هستند، اگر فایلی را بهاشتباه پاک کردهاید، فوراً آن را از سطل آشغال ویندوز به مکان اصلیاش برگردانید. اگر مشکل شما جدیتر است و ویندوز بالا نمیآید، وارد حالت Safe Mode شوید و سپس اقدام به بازگردانی فایلها کنید.
- ۳. بازیابی فایلهای پاکشده به کمک نرمافزارهای ریکاوری فایل: اگر احتمال میدهید که خودتان سهواً فایلهای DLL را پاک کردهاید، میتوانید با استفاده از نرمافزارهای رایگان ریکاوری، فایلهای پاکشده را بازیابی کنید.
- ۴. اسکن تمام فایلها و پوشههای سیستمعامل توسط آنتیویروس: متأسفانه بعضی بدافزارها، میتوانند فایلهای مخربی را ایجاد کرده و آن را تحت عنوان فایلهای DLL اصلی به سیستمعامل معرفی کنند. از آنجا که بخش عمدهای از ارورهای «DLL Not Found» و «Missing DLL» به واسطهی همین بدافزارها رخ میدهند، حتماً هرچندوقت یکبار تمام فایلها و پوشههای سیستمعامل را توسط آنتیویروس اسکن کنید.
- ۵. استفاده از System Restore جهت بازیابی فایلهای پاکشده: اگر فکر میکنید ارورهای مربوط به فایلهای DLL به واسطهی تغییراتی که در فایلهای رجیستری ویندوز اعمال کردهاید رخ میدهند، با استفاده از ابزار System Restore فایلهای پاکشده یا تغییریافته را به حالت اولیهشان بازیابی کنید.
- ۶. نصب دوبارهی برنامههایی که از یک DLL خاص استفاده میکنند: چنانچه بعد از اجرای نرمافزار خاصی با خطاهای مختلف DLL روبهرو میشوید، بهترین راهحل، نصب و راهاندازی دوبارهی همان نرمافزار است.
- ۷. بهروزرسانی درایورها: در بعضی مواقع هنگام استفاده از سختافزارهای خاصی مانند پرینتر با ارورهای DLL مواجه میشوید. در چنین شرایطی، توصیه میکنیم حتماً تمام درایورهای سختافزاری کامپیوترتان را بهروزرسانی کنید.
- ۸. اجرای دستور sfc/scannow: با استفاده از این دستور (System File Checker) میتوانید فایلهای DLL که توسط مایکروسافت تولید شدهاند را با فایلهای آسیبدیده و مخرب جایگزین کنید.
- ۹. بهروزرسانی ویندوز: تعداد فایلهای DLL موجود در سیستمعامل ویندوز بسیار زیاد است و خوشبختانه در بسیاری از مواقع با بهروزرسانی ویندوز به کمک پچها و وصلههای امنیتی میتوانید فایلهای DLL آسیبدیده یا ازبینرفته را اصلاح کنید.
- ۱۰. اصلاح ویندوز به کمک Repair Install: اگر راهکارهای قبلی نتوانستند مشکل شما را برطرف کنند، اصلاح فایلهای سیستمی ویندوز از طریق Repair Install به احتمال زیاد مشکلات مربوط به فایلهای DLL را کاملاً برطرف خواهد کرد.
- ۱۱. نصب مجدد ویندوز (موسوم به Clean Install): این آخرین مرحله است. بنابراین فقط در صورتی که راهکارهای قبلی هیچ تأثیری در برطرف کردن ارورهای مربوط به فایلهای DLL نداشتند سراغ انجام این مرحله بروید. همانطور که میدانید، با نصب مجدد ویندوز، تمام اطلاعات فعلی شما پاک شده و سپس مراحل نصب مجدد ویندوز آغاز میشود. باز هم تأکید میکنیم که قبل از انجام این مرحله، حتماً مراحل قبلی را تست کنید و در صورت عدم موفقیت در حل مشکل فایلهای DLL سراغ انجام این مرحله بروید.
- ۱۲. تعمیر یا تعویض سختافزار: اگر نصب مجدد ویندوز هم ارورهای مربوط به فایلهای DLL را برطرف نکرد، یقیناً یکی از تجهیزات سختافزاری کامپیوتر یا لپتاپ شما آسیب دیده و باید در سریعترین زمان ممکن نسبت به تعمیر یا تعویض آن اقدام کنید.