فايل 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 را برطرف نكرد، يقيناً يكي از تجهيزات سختافزاري كامپيوتر يا لپتاپ شما آسيب ديده و بايد در سريعترين زمان ممكن نسبت به تعمير يا تعويض آن اقدام كنيد.
هم انديشي ها