ببخشید اگه ممکنه بفرمایید فرق load-time dynamic linking با run-time dynamic linking چیه؟
توضیحات موجود در msdn رو دیدم،ولی ظاهرا توی همین برنامه csp ، از load-time linking استفاده شده!
می خواستم ببینم مزیت کدوم یکی بیشتره؟
کار با load-time dynamic linking راحتتر است چون شما فقط نام توابع رو مینویسید و استفاده میکنید مثل برنامه csp که خودتون هم بهش اشاره کردین
ولی در run-time dynamic linking باید با توابع LoadLibrary و GetProcAddress کتابخانه مربوطه لود و آدرس تابع های مورد نیاز گرفته بشه تا بتونیم از توابع استفاده کنیم
مثلا اگه یه dll به نام test.dll داشته باشیم که بخواهیم تابعی به نام MyFunction رو فراخانی کنیم باید همچین کدی بنویسیم
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی همین تابع در load-time dynamic linking به راحتی با این دستور قابل دسترسی هست
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آیا برای ساختن هر فایل dll ، حتما باید یه فایل def. یا h. هم تعریف کرد تا دو تا فایل dll و lib ساخته بشه؟
ممنون میشم اگه مثل همیشه راهنمایی کنید
نه لزوما، ولی وقتی یه dll با مثلا 100 تابع می سازیم حالا اگر بخوایم این رو در یه برنامه استفاده کنیم تعریف تک تک توابع
در برنامه کار خسته کننده هست برای همین تمام تعریفات توابع در یک فایل h. قرار میگیره تا راحت هر جا خواستیم
کنار برنامه کپی کنیم و از توابع استفاده کنیم
و در مورد def. فایل خوب یه dll یکسری توابع رو اصطلاحا export میکنه که قابل استفاده در دیگر برنامه ها باشه
حالا به طریقی کامپایلر باید این توابع رو بشناسه یه راه استفاده از همین فایل هست. اگه ما اینو تعریف نکنیم
در نتیجه dll تابعی export نمیکنه و ما هم نمیتوانیم از اون توابع استفاده کنیم
برای اینکه موضوع براتون روشن تر بشه خوبه که مثلا ببینیم یه dll چه توابعی رو export میکنه
و بد نیست با ابزار dumpbin که همراه ویزوال استادیو هم هست آشنا بشیم
این ابزار در این پوشه است
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اینجوری میشه توابع Export شده یه dll رو مشاهده کرد،
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوبه خودتون یه بار برنامه رو یک بار بدون فایل def. و یک بار هم حالتی که این فایل وجود داره dll رو کامپایل کنید و نتیجه رو ببینید.
شاد باشید