PDA

View Full Version : مبتدی: dll چیست؟(توضیح و طرز استفاده)



mr-adler
پنج شنبه 31 شهریور 1390, 19:02 عصر
سلام دوستان عزیز
میخواستم کاربرد فایل های dll رو به طور کامل بدونم .البته با مثال و جوری که متوجه بشم .
من فعلا تا اینجا اینهارو متوجه شدم:
1.فایل های کم حجمی ولی پر استفاده ای هستند که خود سیستم هم اونها رو داره(فکر کنم تو پوشه سیستم 32)
2.درست کردنشون توسط خودمون بسیار سخته و قالبا اون چیزایی رو که نیاز داریم میشه تو سیستم پیدا کرد(اکثرا اونایی که بازی مینوسین نیاز به dll جدید دارن)
3.مزیت استفاده از این فایل ها اینه که فقط در زمان فراخوانی استفاده میشن پس برنامه حجم کمتری در حافظه اشغال میکنه

اگه ممکنه هر کس که وارده به طور کامل و با مثال توضیح بده تا هم من یاد بگیریم و هم بقیه دوستان:خجالت:.من به غیر از اطلاعات بالا دیگه هیچ چیزی از این فایل های داخل ویندوز نمیدونم .:افسرده:

با تشکر

returnx
پنج شنبه 31 شهریور 1390, 19:12 عصر
Dynamic Link Library ، یا همون کتابخانه پویا اتصال شونده (ترجمه از خودم بود ممکنه کمی ضعیف باشه) کتابخانه ای است که به برنامه های اجرایی در زمان مورد نیاز وصل شده و کامپایل می شود...
DLL ها می توانند کتابخانه ای از توابع یا حتی در بر گیرنده کلاس ها باشند...
برای استفاده از این فایل ها کافیه اون ها رو به Refrence برنامتون اظافه کرده و البته از طریقه استفاده از کلاس های داخل DLL باید اگاهی داشته باشید و بعد میتونید از آون ها استفاده کنید...
به طور مثال ما می خوایم از کتابخانه Scrrun.Dll که حاوی کلاس File System object یا همون FSO برای کار با فایل ها و ... هست استفاده کنیم:
ابتدا از منوی زیر به refrenec دسترسی پیدا میکنیم:
Project /Refrences
بعد گزینه ی Microsoft Scripting Runtime را انتخاب می کنیم و بعد دکمه Ok رو میزنیم ، با اینکار این کتابخانه به پروژمون ارجا داده میشه...
حالا باید یک شی از کلاس File System object ایجاد کنیم در قسمت General یک متغیر از این کلاس ایجاد میکنیم:

Dim fso As FileSystemObject
حالا نیاز داریم این متغیر با شی ما مقدار دهی بشه ، یعنی یک شی جدید ایجاد کنیم کافیه در FormLoad از کد زیر استفاده کنیم:

Set fso = New FileSystemObject
حالا با نوشتن fso و بعد زدن دات به متد های این شی دسترسی داریم که شما میتونید خودتون اونارو مطالعه کنید و در برنامتون استاده کنید ...
این مثالی بود از استفاده DLL ها در برنامه...

mr-adler
پنج شنبه 31 شهریور 1390, 19:19 عصر
ممنونم
منظورم اینه که به طور کاربردی توضیح بدید . فکر کنم باچند تا مثال در حد اماتور یاد بگیرم. در مورد کلاس هیچ اطلاعاتی ندارم.
مثلا الان من متوجه نمیشم کتابخانه ای از توابع یعنی چی؟

اگه با مثال و به صورت کاربردی تر بگید ممنون میشم

returnx
پنج شنبه 31 شهریور 1390, 19:27 عصر
مثال هم زدم ، اگه می خواین یک مثال دیگه هم بزنم؟

در مورد کلاس هیچ اطلاعاتی ندارم.

کلاس ، الگویی از یک شی هست یعنی شما یکبار توابع و خواص یک شی رو به عنوان یک کلاس مینویسین بعد از اون الگو شی میسازید به طور مثال CommandButton شی ای از کلاس دکمه هاست که می تونید بهش خاصیت های مختلف بدید...

کتابخانه ای از توابع
کتابخانه از توابع یعنی ، یک فایلی از قبل ایجاد شده که توش چندین تابع نوشته شده برای سهولت یک کار خاص ، زمانی که شما یک کتابخانه از توابع داشته باشید نیازی ندارید هی کد هاتون رو در چند پروژه که کارهای یکسان انجام می دهند بنویسید کافیه یک بار بنویسید و در n برنامه ازشون استفاده کنید...

mr-adler
پنج شنبه 31 شهریور 1390, 20:41 عصر
ممنون دستتون واقعا درد نکنه(یه چیزایی متوجه شدم:لبخندساده:)
اگه میشه مثال بعدی رو من بزنم:
1.اول به قسمت prefrence رفتم تا Microsoft Scripting Runtime را فعال کنم(ایا این برای تمام dll هاست؟ یعنی با فعال کردن این گزینه میشود از تمام dll ها استفاده کرد یا فقط مخصوص کتابخانه Scrrun.Dll است؟)(راستی چرا فرمت این گزینه هم dll هست؟)
2.سپس میخوام یک متغیر از کلاس دیکشنری ایجاد کنم . تو قسمت جنرال مینویسم dim a as dictionary .حالا من با این کار به کتابخانه ای از توابع که قبلا در کلاس دیکشنری تعریف شده دسترسی پیدا کردم.
3.به وسیله این کد set a=new dictionary من به یک متغیر دسترسی پیدا کردم که میتونم از متد هاش استفاده کنم
--->تعاریفم درسته؟

شرمنده هنوز تعریف کلاس رو متوجه نشدم . ببینید من الان یه برنامه نوشتم که یه کامند داره + 3 تا لیبل که به وسیله inputbox معدل افراد رو میگیره و بر اساس رنگ لیبل ها ارزش معدل رو تایین میکنه . تو این برنامه من کلاس به چی میگن؟

تشکر فراوان

محسن واژدی
پنج شنبه 31 شهریور 1390, 22:45 عصر
ممنون دستتون واقعا درد نکنه(یه چیزایی متوجه شدم:لبخندساده:)
اگه میشه مثال بعدی رو من بزنم:
.
.
.
--->تعاریفم درسته؟

سلام
بله، درست است



شرمنده هنوز تعریف کلاس رو متوجه نشدم . ببینید من الان یه برنامه نوشتم که یه کامند داره + 3 تا لیبل که به وسیله inputbox معدل افراد رو میگیره و بر اساس رنگ لیبل ها ارزش معدل رو تایین میکنه . تو این برنامه من کلاس به چی میگن؟

در این جا کلاس به فرم برنامه، CommandButton، برچسب هایی که در برنامه استفاده شده گفته میشود، اگر کلید F2 را فشار دهید فرم ObjectBrowser باز میشود و میتوانید این کلاس های این اشیاء که حاوی رویداد ها و توابع مرتبط با آن ها هستند را مشاهده کنید

توضیحات بیشتر، کلاس مجموعه ای از توابع ، متغیرها، رویدادها و... که کارهای مشترک و مربوط به یک موضوع را انجام میدهند را در یک جا جمع و مرتب میکند، به عنوان مثال کلاسی را برای نمرات ایجاد میکنیم که شامل چند روال، یکی برای محاسبه معدل، یکی برای جمع نمرات، یکی برای مقایسه نمرات و ... است
همانگونه که میبینید این کلاس در ارتباط با نمرات دانش آموز است و همه روال ها و متغیرهای ایجاد شده در آن نیز به این موضوع مرتبط هستند

موفق باشید

returnx
جمعه 01 مهر 1390, 01:11 صبح
فکر کنم سوالای دیگه رو جناب واژدی جواب دادن اما این یکی موند :

1.اول به قسمت prefrence رفتم تا Microsoft Scripting Runtime را فعال کنم(ایا این برای تمام dll هاست؟ یعنی با فعال کردن این گزینه میشود از تمام dll ها استفاده کرد یا فقط مخصوص کتابخانه Scrrun.Dll است؟)(راستی چرا فرمت این گزینه هم dll هست؟)

نه این گزینه فقط برای استفاده از فایل Scrrun.dll هست ، هر کتابخانه نام خودش رو داره به طور مثال Active Movie Control Type Library به فایل Quartz.dll ارجا میده که کتابخانه ای برای کار با فایل های صوتی و تصویری هست...
هر کدوم از گزینه هایی که شما در پنجره Refrences نمایش پیدا میکنه مربوط به یک کلاس خاص هست...

mr-adler
جمعه 01 مهر 1390, 15:07 عصر
سلام دوستان

تشکر صمیمانه از شما

اما باز هم چند سوال دیگه:(دیگه اخرشه البته اگه به نکته جدیدی بر نخورم:خجالت:)

1.از کجا باید پی ببریم کدام گزینه در preference مربوط به کدام کتابخانه هست؟(تعدادشون خیلی زیاده)
2.در مثالی که شما زدید Scrrun.Dll مربوط بود به کار با فایل ها بود اما مشکل اینه که کاربرد بقیه کتابخانه ها که تعدادشان هم بالاست را باید از کجا متوجه بشم؟(ایا تنها راه امتحان کردن هست؟ یا جایی میتونم به صورت نوشته گیر بیارم که هر کدوم مختص چیه؟)
(راستی ایا خود ویندوز هم از این dll ها استفاده میکنه یا فقط ابزاریه برای برنامه نویس ها؟ درضمن ایا این dll ها در ویندوز های مختلف با هم دیگه فرق میکنند یا نه؟)
3.اطلاعاتی که در تصویر زیر نوشتم درسته یا نه؟

باز هم تشکر

(http://www.pic.iran-forum.ir/images/9wuas21kqpfo3o2pavb.jpg)

returnx
جمعه 01 مهر 1390, 18:55 عصر
اما باز هم چند سوال دیگه:(دیگه اخرشه البته اگه به نکته جدیدی بر نخورم:خجالت:)

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

1.از کجا باید پی ببریم کدام گزینه در preference مربوط به کدام کتابخانه هست؟(تعدادشون خیلی زیاده)

خوب آدرس و اسم DLL که انتخاب کردید در زیر پنجره Refrences نوشته میشه دقت کنید میبینید...

2.در مثالی که شما زدید Scrrun.Dll مربوط بود به کار با فایل ها بود اما مشکل اینه که کاربرد بقیه کتابخانه ها که تعدادشان هم بالاست را باید از کجا متوجه بشم؟(ایا تنها راه امتحان کردن هست؟ یا جایی میتونم به صورت نوشته گیر بیارم که هر کدوم مختص چیه؟)

خوب ال میتونید از اسمشون متوجه بشید ، گزینه بعدی هم اینکه اسم مورد نظر رو تو اینترنت جستجو کنید یا عملی که قصد دارید انجام بدید تا یک کتابخانه مناسب برای هدفتون پیدا کنید ، بعدشم میتونه تجربه باشه ، Refrence خاصی واسه چنین کاری وجود نداره چون هر روز ممکنه یک Dll جدید اظافه بشه و هر شرکت هم Dll های خاص خودش رو داره...

(راستی ایا خود ویندوز هم از این dll ها استفاده میکنه یا فقط ابزاریه برای برنامه نویس ها؟ درضمن ایا این dll ها در ویندوز های مختلف با هم دیگه فرق میکنند یا نه؟)

بله ، 100% استفاده میکنه چون اگه نمیکرد که کارش خیلی سخت میشد ، برنامه نویسا برنامه ای میویسن که نیاز دارن از این DLL ها استفاده کنند ، اینکه با ویندوز های دیگه فرق دارن ، باید فایل هایی که در System32 و دیگر پوشه های ویندوز شما هست با ویندوز های نسخه قبلی و بعدی تا حد زیادی یکسان هست حالا در نسخه های جدید تر ویندوز ممکنه تعدادی به این ها اظافه شده یا کم شده باشه به طور مثال در ویندوز 95 تا 98 اگه اشتباه نکنم برای کار با سیستم صوتی (مثل تولید صدا ، پخش صدا و...) کتابخانه ای بود به اسم Sound البته دقیقا اسمش یادم نیست ممکنه اشتباه گفته باشم اما در ویندوز XP با winmm.dll جایگزین شد...

3.اطلاعاتی که در تصویر زیر نوشتم درسته یا نه؟

بله درسته ، فقط بجای اون متد ها باید می نوشتی خواص و متد ها ، اون دایره که برای کتابخانه هم کشیدی رو باید کوچیک تر میکردی ، چون شما الان کلاس ها رو هم انتخاب کردید...


یک نکته ای رو هم بگم این Refrence هایی که تو اون پنجره میبینید همش برای ماکروسافت نیست و DLL های استاندارد Register شده ی بقیه شرکت ها هم نمایش داده میشه مثل Acrobat Reader یا Install Shield پس تعداد این Refrence ها به برنامه هایی که شما رو سیستمتون نصب کردید هم بستگی داره علاوه بر اون DLL هایی از اینترنت میگیرید که اصلا برای نرم افزار خاص و مهمی نیست و فقط صرفا برای یک کار خاصی نوشته شده و در اینترنت انتشار پیدا کرده...

محسن واژدی
شنبه 02 مهر 1390, 09:33 صبح
1.از کجا باید پی ببریم کدام گزینه در preference مربوط به کدام کتابخانه هست؟(تعدادشون خیلی زیاده)

در تکمیل توضیحات آقای ms2222:
چند راه رایج برای پی بردن به مرجع یک دستور:
1- کلید F2 را بفشارید و در پنجره ObjectBrowser دستور مورد نظر را جستجو کنید و پس از یافتن، در بخش توضیحات دستور که در پایین فرم objectbrowser قرار دارد میتوانید آدرس مرجع تابع را مشاهده کنید
2- بر روی فرمان مورد نظر کلید کرده و کلید های Shift+F2 را فشار دهید تا مستقیما" به مرجع دستور منتقل شوید

موفق باشید

mr-adler
یک شنبه 03 مهر 1390, 03:15 صبح
با سلام
این هم یه مثال از کاربرد کتابخانه ها(تقدیم به دوستان خوبم که کار با این فایل هارو به من یاد دادند) دوست دارم بقیه دوستان هم پیگیری کنند امیدوارم مفید واقع بشه:
ابتدا کتابخانه agentctl.dll رو به وسیله گزینه microsoft agent control از قسمت preference فعال میکنیم. سپس احتیاج به شی agent داریم بنابرین از قسمت کامپونت ها microsoft agent control را فعال میکنیم . بعد از ایجاد شی agent روی فرم کد زیر را در یک کامند مینویسیم:

With Agent1.Characters
.Load ("merlin")
.Item("merlin").Show
.Item("merlin").Think "hello"
.Item("merlin").MoveTo 600, 600
.Item("merlin").Hide
End With

mr-adler
پنج شنبه 07 مهر 1390, 00:20 صبح
با سلام
و اما باز هم برگشتم با یه سوال تازه و نکته ای مبهم و جدید:لبخند:
ایندفعه سوالم در مورد توابع api هست که به کتابخانه ها هم مربوط میشه به همین دلیل گفتم تاپیک جدید ایجاد نکنم:خجالت:
خوب بریم سراغ اصل مطلب:متفکر::
داخل برنامه ویژوال فرمی هست به نام api viewer . در این فرم زمانی که بخواهیم از کتابخانه ها برای دسترسی به توابع api استفاده کنیم باید کتابخانه ها رو از روی فایل متنی و از قسمت file\load text file لود کنیم .(سوال اول:اصلا چرا باید از روی فایل متنی باشه؟:متفکر:چرا مستقیما اجازه استفاده از dll ها رو نمیده) در این پنجره از این همه کتابخانه های موجود در سیستم فقط 3 تای ان نمایش داده میشوند.( حالا سوال اصلی این است برای دسترسی به سایر کتابخانه ها فایل متنی انها رو باید از کجا یافت؟
مثلا من با استفاده از فایل متنی win32api به کتابخانه user32.dll متصل شدم.
امیدوارم متوجه منظورم شده باشید. تلاش کردم منظورمو هر چه کاملتر برسونم.
(یه نکته ای هم وجود داره که به نظرم میرسه که این سه تا فایل متنی معرف کل کتابخانه باشند . ایا درسته؟:متفکر:)

تشکر فراوان:قلب:

محسن واژدی
پنج شنبه 07 مهر 1390, 00:42 صبح
سوال اول:اصلا چرا باید از روی فایل متنی باشه؟http://barnamenevis.images/smilies/yahoo/129.gifچرا مستقیما اجازه استفاده از dll ها رو نمیده

سلام علیکم
این فایل متنی تنها توابع API را لیست میکند، که میتوانید دستور مورد نظر را از اون دریافت کنید، چه بسا که برنامه های مفیدتری نظیر API-Viewer و API-Guide و ... هم هستند، که لیست توابع API را در بانک اطلاعاتی نگهداری میکنند



در این پنجره از این همه کتابخانه های موجود در سیستم فقط 3 تای ان نمایش داده میشوند.

متاسفانه به این برنامه دسترسی ندارم، اما احتمالا" این سه گزینه، شامل: توابع، ثابت ها و نوع ها هستند که هرکدام موارد مربوط به خود را نمایش میدهند



برای دسترسی به سایر کتابخانه ها فایل متنی انها رو باید از کجا یافت؟

هم میتوانید به برنامه هایی که در بالا اشاره کردم و هم به مرجع آنها یعنی کتابخانه MSDN یا سایت مایکروسافت مراجعه کنید




یه نکته ای هم وجود داره که به نظرم میرسه که این سه تا فایل متنی معرف کل کتابخانه باشند . ایا درسته؟

تقریبا" کامل است اما نه همه توابع علل الخصوص توابع جدید که در این فایل ها وجود ندارند

موفق باشید