تور لحظه آخری
امروز : جمعه ، 2 آذر 1403    احادیث و روایات:  امام صادق (ع):سنگهاى زیربناى اسلام سه چیز است: نماز، زکات و ولایت که هیچ یک از آنها بدون دیگرى درست ...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

لوله بازکنی تهران

آراد برندینگ

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

زانوبند زاپیامکس

روغن بهران بردبار ۳۲۰

قیمت سرور اچ پی

خرید بلیط هواپیما

بلیط اتوبوس پایانه

قیمت سرور dl380 g10

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

بهترین وکیل کرج

بهترین وکیل تهران

خرید اکانت تریدینگ ویو

خرید از چین

خرید از چین

تجهیزات کافی شاپ

نگهداری از سالمند شبانه روزی در منزل

بی متال زیمنس

ساختمان پزشکان

ویزای چک

محصولات فوراور

خرید سرور اچ پی ماهان شبکه

دوربین سیمکارتی چرخشی

همکاری آی نو و گزینه دو

کاشت ابرو طبیعی و‌ سریع

الک آزمایشگاهی

الک آزمایشگاهی

خرید سرور مجازی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

نمایندگی دوو در کرج

خرید نهال سیب

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

 






آمار وبسایت

 تعداد کل بازدیدها : 1832189833




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

کمک برای Dynamic Link Library


واضح آرشیو وب فارسی:سایت ریسک: View Full Version : کمک برای Dynamic Link Library mJo0T30-01-2007, 10:49 PMمی خواستم بدونم کسی می تونه در مورد ساخت فایل هلی dll توی ++ Visual C به من کمک کنه. واقعاً ممنون میشم :cool: someone31-01-2007, 02:37 PMسلام. اول یه توضیح خیلی مختصر (خیلی خیلی مختصر) در باره Dll ها : Dll یا Dynamic-link Library کتابخانه ای هست با یک سری تابع یا کلاس بطوری که برنامه های دیگه میتونن از این توابع یا کلاس ها استفاده کنن.Dll ها مزیت های زیادی دارن. از جمله اینکه حجم برنامه ها رو زیاد نمیکنن چون با برنامه ی مورد نظر link نمیشن. چند برنامه همزمان میتونن به یک Dll دسترسی داشته باشن که نکته ی خیلی مهمی هست. ودلایل دیگه. توابع ارسالی در جدولی داخل Dll قرار میکیرند و به توابعی که در این جدول موجود باشن میشه دسترسی پیدا کرد. یک Dll نمیتونه public Variable داشته باشه و در ضمن تمامی متغییر ها باید بصورت آرگومان به Dll ارسال بشن. برای دسترسی و استفاده از توابع یک Dll دو روش وجود داره : 1- باید با ساختار تابع مورد نظر در Dll آشنا باشید.مثلا بدونید که تابع چند آرگومان داره یا چه نوعی رو برمیگردونه. بعد یک اشاره گر به تابع مورد نظر ایجاد میکنیم. با استفاده از LoadLibrary و GetProcAddress تابع مورد نظر رو بیرون می کشیم. روش نسبتا مشکلی هست. و اشکالات رو خودمون باید handle کنیم. اما برای استفاده از خیلی Dll ها (به خصوص در Windows برای استفاده از بعضی API ها) تنها روش همین هست. اگه Dll رو خودتون ننوشته باشید پیدا کردن مشخصات یک تابع با اسمی که تنها شما حدس میزنید خیلی مشکل هست.که باید Dll مورد نظر رو Dump کرد. 2- روش دوم که روش ساده تری هست Link کردن فایل Lib به برنامه هست.وقتی یک Dll ایجاد میکنید همراهش یک فایل Lib هم ایجاد میشه. این فایل Lib اسامی توابع و آرگومان های اونها رو به همراه داره البته بدون تعریفشون. (prototype) بنابراین وقتی به برنامه لینک بشه به راحتی میشه از توابع درون Dll استفاده کرد. در ضمن اگه مشکلی هم برای Dll مورد نظر پیش بیاد , برنامه به شما اخطار میده. بین این دو روش روش اول کاربرد بیشتری داره. چون بیشتر Dll ها بدون فایل Lib منتشر میشن. در VC به طور کلی میتونید 3 نوع DLL ایجاد کنید : (به غیر از در نظر گرفتن ActiveX ها) که دو نوعش با استفاده از MFC AppWizard ایجاد میشه با نام های Regular Dll و MFC Dll . نوع سوم هم Win 32 Dynamic-Link library هست. هنگامی که از MFC Dll استفاده میکنید به راحتی میتونید از تمامی کلاس های MFC استفاده کنید و حتی اونها رو Export کنید. اما این Dll ها ضعف بزرگی دارند و اون هم اینه که تنها در زبان هایی که از MFC پشتیبانی میکنن میشه ازشون استفاده کرد. البته در مورد Regular Dll مقداری قضیه فرق میکنه. با اینکه میشه در اون از کلاس های MFC استفاده کرد با تغییراتی میشه اون رو به صورت یک Dll استاندارد در آورد.برای این کار کافی از ساختار Windows به جای کلاس ها استفاده بشه. نوع سوم هم مشخصه که با اون میشه یک Dll استاندارد تحت Win32 ایجاد کرد. در اینجا در مورد Win32 Dll بحث می کنیم : برای ایجاد یک Win32 Dll به این صورت عمل میکنیم : از منوی فایل گزینه new و از dialog باز شده گزینه Win32 Dynamic-Link library رو انتخاب و اسمی برای پروژه انتخاب میکنیم و در پنجره ی بعدی که بعد از OK کردن باز میشه, گزینه ی An empty Dll Project رو انتخاب میکینم و روی Finish کلیک میکنیم. حالا دوباره از منوی فایل این بار از Files tab گزینه C++ source file رو اتخاب و براش اسمی در نظر میگیریم. این مرحله رو یک بار دیگه هم تکرار می کنیم و این بار C++ Header file رو انتخاب میکنیم .اسمی که من برای این دو فایل در نظر گرفتم main هست. در workspace (منوی سمت چپ) اگه روی File view کلیک کنید در قسمت Source file و Header file میتونید فایل های ایجاد شده رو ببینید. روی فایل main.h دوبار کلیک کنید تا باز بشه و کد زیر رو بهش اضافه کنید : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! قرار هست ما در این Dll تابعی به نام Sum ایجاد کنیم که دو عدد رو باهم جمه میکنه. پیش از تعریف تابع از ماکروی با نام DLL_API استفاده کردیم. استفاده از ماکرو برای Export تابع مورد نظر لازم هست. اگه از Def file استفاده کنیم نیازی به استفاده از این ماکرو نیست. ولی در صورت استفاده کار راحت تر میشه. روی main.cpp دوبار کلیک کنین تا باز شه و کد زیر رو در اون قرار بدید : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! Entry-point یک Dll تابعی هست با اسم DllMain که سه آرگومان داره. توضیح کار هر کدوم از آرگومان ها خیلی مفصله. اگه خواستید در موردش صحبت میکینم. بعد از DllMain تابع مورد نظر مون رو مینویسیم. میبینید که کار چقدر راحت هست. در پایان هم برنامه رو Execute میکینم.بعد از Excute کردن پنجره باز میشه که از شما میخواد که Dll رو به برنامه ایAttach کنید. این پنجره رو ببندید. خب برای استفاده از Dll ی که ساختیم یک پروژه جدید از نوع MFC App ایجاد کنید. (Dialog base) من پروژه ای با نام _Test ایجاد کردم. در فایل _TestDlg.Cpp این کد رو اضافه میکنیم. البته بعد تعریف header ها : فایل Dll و Lib از پوشه debug به پروژه ی جدید منتقل کنید. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! به جای استفاده از pragma# میتونید مستقیما فایل Lib مورد نظر رو به برنامه Link کنید. (از طریق Add to project در منوی project) . براحتی میشه از تابع Sum استفاده کرد : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! متوجه شدید که از روش دوم برای invoke کردن تابع Sum استفاده کردیم. (استفاده از فایل Lib) سعی کردم خلاصه و مفید توضیح بدم. اگه جایی مشکل داشت یا براتون مشکلی پیش اومد اطلاع بدید. mJo0T31-01-2007, 06:58 PMاز اینکه کمکم کردی ممنونم سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 293]

bt

اضافه شدن مطلب/حذف مطلب




-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن