PDA

View Full Version : کارایی DLL و نحوه پیاده سازی



sang9111
پنج شنبه 03 بهمن 1387, 15:09 عصر
با سلام
آقا نیما من یک مشکل دارم با dll ها
من می خوام حجم فایل اجرایی که با Qt می نویسم کم بشه و بیشتر برنامه به عهده DLL ها باشه اینطوری هم حجم برنامه کمتر میشه هم سریع تر میشه
من برای اینکه DLL کنم باید چه کار کنم من تجربه ای در این مورد نداشتم

من بعضی از کدها و برنامه هایی که با Qt نوشته می شن رو می خونم می بینم خبری از DLL های اجرایی Qt نیست و DLL های خاص خودشون دارن فکر می کنم DLL های QT رو مجتمع می کن
به عنوان مثال حجم فایل اجرایی اپرا فقط 77 کیلو بایت است ولی DLL به مگ می رسه
اگه میشه یک راهنمایی کنید سوالی شده برام :متفکر:

Nima_NF
پنج شنبه 03 بهمن 1387, 15:37 عصر
در مورد dll های Qt که یا آن ها را استاتیک لینک می کنید تا به فایل اجرایی اضافه شوند یا به صورت دینامیک که جداگانه در کنار فایل اجرایی قرار می دهید (هر کدام را که نیاز هست)
ضمنا ممکن هست که نرم افزاری با استفاده از setup به جای اینکه dll ها را در فولدر برنامه کپی کند در مسیر system ویندوز بریزد. پس برای این کار از dependency walker استفاده کنید و با یافتن dll مورنظر با راست کلیک کردن بر روی آن، مسیر آن را می توانید بیابید.

نرم افزارها اکثرا به این صورت هستند که کدهای برنامه را تقسیم بندی می کنند و در dll های مختلف می نویسند (GUI در یکی، پردازش در یکی و ...) و در بدنه اصلی برنامه که در فایل اجرایی قرار می گیرد فقط توابع ان ها را فراخوانی می کنند.
مزیت چیست؟ یکی اینکه می توانند فقط همانند dll را update کنند و شما هم لازم نباشد کل برنامه را دانلود کنید تا مثلا فقط یک خطا بر طرف شود و خیلی مزایای دیگر.

بیشترین میزان افزایش حجم برنامه مربوط به resource ها (مانند عکس و Icon و ...) هست که برای آن ها نیز از یک dll استفاده می کنند (resource-only dll) (http://msdn.microsoft.com/en-us/library/24b2tcy0%28VS.80%29.aspx)

sang9111
پنج شنبه 03 بهمن 1387, 20:26 عصر
نحوه پیاده سازی چطوری مثلا بیام و برای یک قسمت از برنامه DLL بسازم
و از dll های QT استفاده کنم و یک DLL بسازم :متفکر:

Nima_NF
پنج شنبه 03 بهمن 1387, 22:49 عصر
تا حالا شخصا dll های معمولی را در Qt تست نکردم تا ببینیم آیا مثلا همه کلاس ها را می توان export کرد یا نه .. اما باید به راحتی همانطوری که فایل اجرایی را می سازید بتوانید بخش های داخلی آن ها را به dll صادر کنید. برای این کار در CONFIG به جای فایل اجرایی می توان نوع خروجی را dll تعریف کرد و یا سایر موارد.
(ساخت یک dll همانطوری هست که در سایر سیستم عامل ها یک پروژه dll می سازیم و هر جایی که خواستیم کلاس را export می کنیم)

در هر حال برای Qt شاید بهترین راه استفاده از نوشتن Plugin هست که با استفاده از کلاس plugin امکان خروجی دادن interface ها را به کتابخانه (dll, .so , ...) برای همه سیستم عامل ها فراهم می کند.
مثلا در اسناد QT برنامه Plug & Paint را چک کنید که از این شیوه استفاده می کند و شما می توانید به جای فولدر plugin مسیر کنونی را نیز برای کتابخانه ها تعیین کنید.

sang9111
جمعه 04 بهمن 1387, 01:34 صبح
به همه دوستان هم که QT رو حرفه ای دنبال می کنن پیشنهاد می کنم حتما این خصوصیت یاد بگیرن که خیلی به درد می خوره و مثل من دیر به فکر این کار نیفتن:چشمک: