سوال در مورد dll ها

#C

توسط thearrow در 5 سال پیش
2 840 2 9 ماه پیش
thearrowc0derparisa009
0

سلام میخواستم بدونم که dll ها به درد چه کارهایی میخورن و در واقع چی هستند و چه طوری میشه ساختشون و اینکه آیا میشه به تمامی کد هایی که درون یک dll هست ، دسترسی پیدا کرد؟ ممنون

0

DLL ها حاوی کدها و داده هایی هستند که میتونن همزمان توسط چند برنامه مورد استفاده قرار بگیرن میشه گفت از نوشتن مجدد کدها جلوگیری میشه


> فایل dll یک کتابخونه ازData و Code هست که می تونه در یک زمان توسط چندینApplication مورد استفاده قرار بگیره . برای مثال در سیستم عامل Windows فایل Comdlg32.dll عملکرد های مربوط به Dialog Box ها رو انجام میده در نتیجه هر Application ی در ویندوز می تونه از توابعی که توی این dll هستند موقع باز کردن Dialog Box استفاده کنه . مزیت اصلی فایل های dll در استفاده مجدد و همینطور استفاده بهتر از حافظه سیستم هست . در كامپيوتر، DLL که مخفف dynamic link library است مجموعه اي از برنامه هاي کوچک است، که هر کدام مي تواند توسط يک برنامه بزرگتر که در کامپيوتر در حال اجرا است احضار شود. برنامه کوچکي که به برنامه بزرگتر اجازه برقراري ارتباط با يک وسيله ويژه مثل چاپگر (پرينتر) و يا اسکنر را ميدهد همواره به عنوان يک برنامه DLL بسته بندي مي شود( معمولا به " فايل DLL " اشاره مي شود). مزيت فايل هاي DLL اين است که، از آنجا که آنها در حافظه كامپيوتر (RAM) با هم به همراه برنامه اصلي بارگذاري نــمي شوند، فضا در RAM صرفه جويي مي شود. وقتي که يک فايل DLL نياز است، بعد بارگذاري و اجرا مي شود. به طور مثال تا مادامي که يک کاربر microsoft word ( يک برنامه پردازش کلمه که توسط شرکت microsoft به وجود امده است ) دارد يک سند (Document) را ويرايش مي کند، فايل DLL چاپگر نياز نيست تا در RAM بارگذاري شود. اگر کاربر تصميم به پرينت گرفتن آن سند بگيرد، سپس برنامه کاربردي Word باعث مي شود تا فايل DLL چاپگر بارگذاري و اجرا شود. اين ويژگي چندين مزيت دارد : اول اينكه چون فايل هاي DLL فقط در هنگام نياز بارگذاري مي شوند ، وقتي مورد استفاده نباشند ، حافظه اي رو مورد مصرف قرار نمي دهند . دوم اينكه چون فايل DLL فايلي جداگانه هست ، برنامه نويسان مي توانند بدون تاثير روي برنامه فراخوان يا فايلهاي DLL ديگر ، اصلاحات يا تغييراتي را در يك واحد ( فايل DLL ) انجام دهند . به يک فايل DLL اغلب پسوند نام فايل ".dll" داده مي شود. فايل هاي DLL به صورت پويايي به برنامه اي که از آنها در طول زمان اجراي برنامه استفاده مي کند متصل هستند تا اينکه با برنامه اصلي گردآوري شوند. مجموعه چنين فايل هاي (يا DLL ) تقريبا قابل مقايسه با کتابخانه روال هايي هستند (library routines) که با زبان هاي برنامه ريزي از قبيل ++C و C فراهم مي شوند. ويژگي خاصي در مايكروسافت ويندوز و سيستم عامل os/2 مي باشد واين امكان را فراهم مي سازد تا روالهاي اجرايي به عنوان فايل هاي جداگانه اي با پسوند dll ذخيره شوند. و فقط هنگام نياز برنامه اي فراخواننده آنها، بارگذاري شوند. اين ويژگي چندين مزيت دارد: اول اينكه چون فايل هاي dll فقط در هنگام نياز بارگذاري مي شوند، وقتي مورد استفاده نباشند، حافظه اي رو مورد مصرف قرار نمي دهند. دوم اينكه چون فايل dll فايلي جداگانه هست، برنامه نويسان مي توانند بدون تاثير روي برنامه فراخوان يا فايلهاي dll ديگر، اصلاحات يا تغييراتي را در يک واحد (فايل dll) انجام دهند. قبلا به این موضوع اشاره شد که فایهای DLL آن دست از برنامه هایی هستند که یکبار نوشته می شوند و در پروژه های بعدی بکرات می تواند از آنها استفاده برد. چیزی که هسته ویندور را تشکیل می دهد اینگونه فایلها هستند. علاوه بر آن تکنیک هایی وجود دارد که شما را قادر می سازد تا برنامه هایی بنویسید که قادرند خود را بروز برسانند و یا خود ترمیم باشند. بهتر از آن اینکه برنامه ای بنویسید که با الحاق اینگونه فایلها بدان قدرت و امکانات جدید بدان افزود. همانند نرم افزارهای رایج از جمله Winamp. کتابخانه های پویای قابل اتصال (DLL) چه هستند؟یک DLL مجموعه ای از توابع و پروسه هایی است که می تواند از برنامه یا DLLهای نظیر خود فراخوانده شود. استفاده از اینگونه کتابخانه های دو مزیت اصلی دارد: 1- امکان به اشتراک گذاری از کد را فراهم می سازند. یک DLL می تواند مورد استفاده خیلی از برنامه های قرار گیرد. بعنوان مثال کتابخانه Win32 API نمونه ای از این سری فایلها است. بعلاوه از زمانی که پروسه های گوناگون قادر به فراخوانی یک DLL واحد هستند امکان به اشتراک گذاری کد ها و روتین ها فراهم آمده است. یک فایل DLL تنها یکبار به درون حافظه لود می شود و بارها توسط پروسه های گوناگونی مورد استفاده قرار می گیرد و این یعنی مدیریت حافظه بهتر. 2- مزیت دیگر امکان نوشتن برنامه ها بصورت اجزای منفصل است که این اجزا خود قابل تعویض با نگارش های جدیدتر جهت توسعه نرم افزار خواهند بود بدون اینکه خطی از کد برنامه اصلی دگرگون شود. با این توصیف فایلهای کتابخانه ای درونی که در پروژه های مورد استفاده قرار می گیرد در صورت تغییر نیاز هست تا پروژه اصلی دوباره کمپایل شود تا بتوان با آن ارتباط بر قرار کرد. اما در DLL ها چون بصورت پویا و قابل انعطاف نوشته شده اند این اتصال در بیرون از بدنه اصلی و درست در زمان فراخوانی آن قبیل از متدها و توابع شکل می گیرد و این خود تفاوت آشکار از مزیت این گونه از فایلها می باشد.همچنین یک فایل DLL می تواند حاوی توابعی باشد که فقط مورد استفاده خود هست و از درون به آن دسترسی نخواهیم داشت و آندسته از تابعی را که نیاز هست معرفی می کنیم تا از بیرون بدان دسترسی داشته باشیم. در این مرحله نیاز به معرفی در فایلهای Def هست که در پروژه های C و C++ مورد استفاده قرار می گیرد. و اما ساختار DLL فایلهای DLL حاوی یک مدخل شروع انتخابی (optional entry point) و پایانی هستند که در زمانی که توسط برنامه های دیگر به درون حافظه لود یا آنلود می شوند قابل اجرا است. ویندوز این پروسه را در زمانی که یک برنامه DLLها را بدرون حافظه لود یا آنلود می کند اجرا می کند. این دو نوع پروسه به DLL این امکان را می دهد که یک سری از مقدمات را پیش از استفاده مهیا کند یا بعد از استفاده پاکسازی نماید کاربرد dll در برنامه نویسی : با استفاده از این فایل های dll میشه برنامه هارو به صورت کاملا Modular و با مولفه های قابل مدیریت نوشت دلیلشم اینه که Module ها به صورت جدا از هم کار می کنند و هر Moduleی که نصب شده باشه در زمان اجرا توی حافظه Load میشه و از یه Module فقط زمانی استفاده میشه که به اون Module احتیاج باشه . مزیت دیگه استفاده از Module اینه کهUpdate برنامه خیلی راحت تر انجام میشه و فقط Module مورد نظر Update میشه بدون اثر گذاشتن روی سایر Module ها . فایل های زیر در سیستم عامل Windows به عنوان DLL مورد استفاده قرار می گیرند . ActiveX Controls (.ocx) files مثه کنترل Calendar در ویندوز . Control Panel (.cpl) files مثه همه Item های موجود در کنترل پنل Windows Device Driver Controls (.drv) files مثه یک فایل Driver برای یک Printe برنامه نویسی DLL توی VStudio.Net خداییش کار خیلی سختیه ... خوشبختانه خودWindows مجموعه کاملی از DLL ها رو در اختیار برنامه نویس قرار میده . در نتیجه خیلی به ندرت پیش میاد که بخوایم DLL های مورد نیازمون رو خودمون بنویسیم ... این کار بیشتر توی پروژه های Game Programing انجام میشه [ComputerStop - فایل DLL چیست ؟](http://swe-fathi.blogfa.com/post-42.aspx)
  • برای ساخت DLL میتونی از گزینه Class Library در پنجره New Project برنامه Visual Studio استفاده کنی.
  • ویرایش کردن یا دیدن سورس DLL ها به اندازه فایلهای EXE سخته با برنامه هایی مثل WIN32Dasm میتونی ببینی البته بصورت باینری.
0

سلام و وقت بخیر یه نرم افزار داریم برای به دست آوردن رقم کنترلی یه سری شماره حساب . به محض وارد کردن هر رقم از شماره حساب، پیغام class not registered میده. آیا dll خاصی نیاز داره؟ برنامه نویس، dll خاصی براش نوشته؟ ... ممنون

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید