Felony
سه شنبه 24 فروردین 1389, 07:24 صبح
:لبخندساده:سلام ،
در حال نوشتن یک DLL هستم ، به جای اینکه کامپوننت های Non Visual رو به صورت RunTime بسازم تصمیم گرفتم کامپوننت ها رو روی یک Data Module قرار بدم و چون اولین بارم بود که این کار رو میکردم تجربه ای نداشتم ، وقتی تو یونیت پلاگین متدها اشیاء روی Data Module رو صدا میزدم پیغام خطا میگرفتم و فهمیدم باید Data Module رو هم مثل فرم Create کرد ، با کد زیر Data Module رو تو DLL میسازم :
DM_Main:= TDM_Main.Create(nil);
حالا برنامه ای که از DLL استفاده میکنه زمان بسته شدن پیغام خطا میده چون Data Module آزاد نشده !
من برای آزاد کردن فرم ها این کار رو میکردم :
1.کد زیر رو تو یونیت فرم قرار میدادم :
// Free components on close //////////////////////////
procedure TFRM_Properties.DestroyPlugin(var Msg: TMessage);
var
i: Integer;
begin
for i := ComponentCount - 1 downto 0 do
begin
if (Components[i] is TControl) then
TControl(Components[i]).Parent := nil;
Components[i].Free;
end;
release;
inherited;
end;
//////////////////////////////////////////////////////
و تو رویداد OnClose با کد زیر فرم رو آزاد میکردم :
SendMessage(FRM_Properties.Handle, WM_DESTROY, 0, 0);
ولی Data Module هندل نداره ...
باید چی کار کنم ؟
در حال نوشتن یک DLL هستم ، به جای اینکه کامپوننت های Non Visual رو به صورت RunTime بسازم تصمیم گرفتم کامپوننت ها رو روی یک Data Module قرار بدم و چون اولین بارم بود که این کار رو میکردم تجربه ای نداشتم ، وقتی تو یونیت پلاگین متدها اشیاء روی Data Module رو صدا میزدم پیغام خطا میگرفتم و فهمیدم باید Data Module رو هم مثل فرم Create کرد ، با کد زیر Data Module رو تو DLL میسازم :
DM_Main:= TDM_Main.Create(nil);
حالا برنامه ای که از DLL استفاده میکنه زمان بسته شدن پیغام خطا میده چون Data Module آزاد نشده !
من برای آزاد کردن فرم ها این کار رو میکردم :
1.کد زیر رو تو یونیت فرم قرار میدادم :
// Free components on close //////////////////////////
procedure TFRM_Properties.DestroyPlugin(var Msg: TMessage);
var
i: Integer;
begin
for i := ComponentCount - 1 downto 0 do
begin
if (Components[i] is TControl) then
TControl(Components[i]).Parent := nil;
Components[i].Free;
end;
release;
inherited;
end;
//////////////////////////////////////////////////////
و تو رویداد OnClose با کد زیر فرم رو آزاد میکردم :
SendMessage(FRM_Properties.Handle, WM_DESTROY, 0, 0);
ولی Data Module هندل نداره ...
باید چی کار کنم ؟