PDA

View Full Version : امکان ایجاد متغیر Global در DLL



MEhdi Sobhani
چهارشنبه 17 آذر 1389, 11:35 صبح
با عرض سلام و خسته نباشید .
یه سوال داشتم در این مورد که آِیا امکان ایجاد متغیر گلوبال در DLL وجود داره .
تازه دلفی رو شروع کردم شاید متغیر گلوبال اصطلاح درستی نباشه منظورم از متغیر گلوبال مثل چیزی هست که در یونیت تعریف میکنیم و بعد با uses اضافه می کنیم به برنامه .
به علاوه این امکان رو داشته باشه که وقتی DLL رو یه جای دیگه دوباره load میکنیم ، بازم اون مقدارها از بین نره و اگر اونجا تغییرش دادیم اینجا هم تغییرات وجود داشته باشند ، در کل یعنی اینکه این متغیر مشترک باشه .
با تشکر فراوان .

Felony
چهارشنبه 17 آذر 1389, 13:08 عصر
یعنی یک متغییر تو DLL تعریف کنی و تو برنامه هایی که DLL رو بارگذاری کردن بهش دسترسی داشته باشی و وقتی برنامه A مقدار متغییر رو تغییر داد در برنامه B این تغییر مشاهده بشه ؟

MEhdi Sobhani
چهارشنبه 17 آذر 1389, 13:15 عصر
یعنی یک متغییر تو DLL تعریف کنی و تو برنامه هایی که DLL رو بارگذاری کردن بهش دسترسی داشته باشی و وقتی برنامه A مقدار متغییر رو تغییر داد در برنامه B این تغییر مشاهده بشه ؟
سلام
بله
دقیقا همین .

tdkhakpur
چهارشنبه 17 آذر 1389, 13:31 عصر
به علاوه این امکان رو داشته باشه که وقتی DLL رو یه جای دیگه دوباره load میکنیم ، بازم اون مقدارها از بین نره و اگر اونجا تغییرش دادیم اینجا هم تغییرات وجود داشته باشند ، در کل یعنی اینکه این متغیر مشترک باشه .

متغییر بین دو برنامه به اشتراک گذاشته نمیشه مگر اینکه شما حافظه رو بصورت پویا تعریف کنید.
برای این کار از CreateFileMapping و برای دسترسی OpenFileMapping استفاده کنید.
روش کار به این شکله که در قسمت اول شما یک فضایی رو از ram میگیرید و بهش یک اسم گلوبال میدید بعد از اون برای دسترسی کافیست اسمی رو که تعریف کردید توسط OpenFileMapping بدید تا محل حافظه رو برای شما برگست بده.

BORHAN TEC
پنج شنبه 18 آذر 1389, 10:12 صبح
این مطالب دقیقاً در کتاب Delphi 6 Developers Guide در فصل 6 مورد بررسی قرار گرفته. در زیر هم یک مثال را قرار داده ام که می توانید از آن هم استفاده کنید.برای تست این برنامه ابتدا هر سه پروژه را ابتدا کامپایل کنید و بعد برنامه ها را تست نمایید.