PDA

View Full Version : سوال: نحوه خروج دی ال ال به صورت ایستا



nsco_nsco
جمعه 29 بهمن 1389, 01:26 صبح
سلام دوستان
یک سوال مهم داشتم زمانی که ما می اییم به صورت پویا یک دی ال ال رو می خونیم به صورت زیر از حافظه خارجش می کنیم:
FreeLibrary(***);

اما زمانی که به صورت ایستا از دی ال ال استفاده می کنیم چطوری باید از حافظه خارجش کنیم من تست کردم در حافظه بعد از خروج از نرم افزار همچنان وجود دارد ممنون می شوم سریع جواب بدید مرسی :لبخند::تشویق::قلب:

BORHAN TEC
جمعه 29 بهمن 1389, 09:31 صبح
در روش ایستا شما نمی توانید به صورت دستی dll را از حافظه خارج کنید، مگر اینکه از روش dynamic استفاده کنید.

vcldeveloper
جمعه 29 بهمن 1389, 11:13 صبح
اما زمانی که به صورت ایستا از دی ال ال استفاده می کنیم چطوری باید از حافظه خارجش کنیم
وقتی DLL را به طور ایستا لود می کنید، در پایان اجرای برنامه شما، به طور خودکار مقدار Reference Counter آن DLL کاهش پیدا میکنه. تشخیص اینکه کی باید از حافظه خارج بشه، با سیستم عامل هست، که به طور خلاصه در پایین توضیح دادم...


من تست کردم در حافظه بعد از خروج از نرم افزار همچنان وجود دارد
LoadLibrary و FreeLibrary لزوما یک DLL را در حافظه لود نمی کنند، بلکه هر DLL فقط یک بار در حافظه سیستم لود میشه. هر برنامه ایی که LoadLibrary را فراخوانی کنه، اگر DLL در حافظه نبود، اون DLL لود میشه. اگر بود، فقط مقدار Reference Counter اون DLL افزایش پیدا میکنه. در زمان استفاده از FreeLibrary هم، مقدار این شمارنده (Reference Counter) یک واحد کاهش پیدا میکنه. اگر مقدارش به صفر رسید، اون DLL از حافظه خارج میشه.

پس اگر شما یک DLL را FreeLibrary کنید، و برنامه یا برنامه هایی همچنان در حال استفاده از آن باشند، DLL از حافظه خارج نمیشه.