PDA

View Full Version : سوال: Load چند باره DLL ؟



Modifier
پنج شنبه 06 آبان 1389, 10:09 صبح
بسم الله
با سلام

من یه DLL دارم که میخوام اون رو چند بار به طور مستقل لود کنم... چه طور میشه این کار رو کرد؟ یعنی میخوام هر دفعه که Load میشه کاری به قبلیه نداشته باشه(متغییرهاش و کلیه داده هاش جدا باشه)

(DLL من یک فرم هست)...

ممنون.
یاعلی.

Felony
پنج شنبه 06 آبان 1389, 10:20 صبح
شما لازم نیست کاری بکنید ، خودم سیستم عامل این مدیریت رو بر عهده داره ، ماهیت DLL همین هست که چند نرم افزار مختلف بتون به طور هم زمان و بدون مشکل از توابعش استفاده کنن ، مثل DLL های ویندوز که توابع API و ... رو شامل میشن و چند صد برنامه به صورت همزمان ازشون استفاده میکنن .

DLL من در یک فرم هست یعنی چی ؟ یعنی DLL تون فرم داره یا ... ؟!

Modifier
پنج شنبه 06 آبان 1389, 10:51 صبح
شما لازم نیست کاری بکنید ، خودم سیستم عامل این مدیریت رو بر عهده داره ، ماهیت DLL همین هست که چند نرم افزار مختلف بتون به طور هم زمان و بدون مشکل از توابعش استفاده کنن ، مثل DLL های ویندوز که توابع API و ... رو شامل میشن و چند صد برنامه به صورت همزمان ازشون استفاده میکنن .

DLL من در یک فرم هست یعنی چی ؟ یعنی DLL تون فرم داره یا ... ؟!

ممنون..

ولی منظورم این نبود..
من میخوام یه DLL رو تو یه برنامه چندین بار Load کنم..؟!!

...
اون جمله آخر هم اصلاح شد----->> DLL من یک فرم هست یا بهتر بگم یه پروژه ی کامل.

Mahmood_M
پنج شنبه 06 آبان 1389, 16:51 عصر
نمی تونید با دستوراتی مثل LoadLibrary یک DLL رو چند بار لود کنید ، چون این تابع ابتدا در حال استفاده بودن یا نبودن DLL رو بررسی میکنه ، مثلا در کد زیر :
var
FirstHandle, SecondHandle : THandle;
begin
FirstHandle := LoadLibrary('MyDll.dll');
SecondHandle := LoadLibrary('MyDll.dll');
...
end;
با اجرای این دستور هر دو متغیر FirstHandle و SecondHandle مقادیر یکسانی خواهند داشت ، درواقع وقتی بار اول یک DLL لود میشه یک Handle بهش اختصاص داده میشه ، برای بار دوم چون DLL لود شده ، Handle همون DLL لود شده برگشت داده میشه و درواقع مکان جدیدی در حافظه برای اون DLL ایجاد نمیشه ، دقیقا نمی دونم ولی شاید با FileMapping (http://msdn.microsoft.com/en-us/library/aa366556%28VS.85%29.aspx) مشکلتون حل بشه ، البته شاید راه های دیگه ای هم برای حل مشکلتون باشه ، بهتره توضیح دقیقتری بدید ، شاید نیاز به لود چند باره DLL نباشه ...

tdkhakpur
پنج شنبه 06 آبان 1389, 22:24 عصر
من میخوام یه DLL رو تو یه برنامه چندین بار Load کنم..؟!!


احتمالا منظور شما شروع مجدد برنامه داخل Dll هست و میخواهید متغییرها از نوع ساخته شده و فضای جدایی با متغییر های dll قبلی باشه.
برای اینکه این کار رو انجام بدید کد داخل فرم را پویا بسازید .
توضیحا اینکه هر dll که با استفاده از loadlibrery لود شده باشه ابتداDLL_PROCESS_ATTACH و در آخرDLL_PROCESS_DETACH اجرا میشه در این مراحل میتوانید عملیات پویا سازی را انجام بدید.