با سلام خدمت دوستان گرامي
من يك برنامه طراحي كردم كه از يك Host Application و يك فايل DLL كه داراي فرم هست تشكيل شده .
وقتي در Host Application بر روي يك Button كليك مي كنم اين DLL اجرا مي شه .ولي وقتي فرم مربوط به DLL رو مي بندم ، فايل DLL از حافظه خارج نمي شه و فضاي زيادي رو اشغال مي كنه .تا وقتي كه Host Application رو نبستم با هر بار باز شدن فرم مربوط به DLL فضاي اشغال شده Ram چند برابر مي شه .مي خواستم در اين خصوص كمكم كنيد .ممنون ميشم .
البته مي دونم كه بايد بصورت Dynamic باشه ولي نتونستم كدش رو بنويسم.
كد هاي مربوط به Host Application :
[PASS]
procedure showmdichild(MainApp: TApplication; id, namefamily, skin,
CodeManager: string); stdcall; external 'PowerLib.dll' delayed;
procedure TForm1.sButton1Click(Sender: TObject);
begin
showmdichild(Application,Edit1.Text,Edit2.Text,Edi t3.Text,Edit4.Text);
end;
[/PASS]
كد هاي مربوط به DLL :
[PASS]
var
DLLApp: TApplication;
procedure showmdichild(MainApp: TApplication;id,namefamily,skin,CodeManager:string ); stdcall;
var
Child: TForm1;
begin
if not Assigned(DLLApp) then
begin
DLLApp := Application;
Application := MainApp;
end;
Child := TForm1.Create(Application.MainForm);
Child.Show;
end;
//--------------------------------
procedure MyDLLProg(Reason: integer);
begin
if Reason = DLL_PROCESS_DETACH then
if Assigned(DLLApp) then
begin
Application := DLLApp;
end;
end;
exports showmdichild;
//--------------------------------------
begin
DllProc := MyDLLProg;
end.
[/PASS]
عكس هاي برنامه به همراه فضاي اشغال شده RAM:
اجراي بار اول
![اجراي بار اول.JPG اجراي بار اول.JPG](https://forum.majidonline.com/data/attachments/79/79224-e704eefc33586525d3d6f410f7155c41.jpg)
اجراي بار دوم
![اجراي بار دوم.JPG اجراي بار دوم.JPG](https://forum.majidonline.com/data/attachments/79/79225-68617b3ab75458537be92ab42ec5c054.jpg)
اگه ممكنه لطفا كد درستشو واسم بزاريد .ممنون
من يك برنامه طراحي كردم كه از يك Host Application و يك فايل DLL كه داراي فرم هست تشكيل شده .
وقتي در Host Application بر روي يك Button كليك مي كنم اين DLL اجرا مي شه .ولي وقتي فرم مربوط به DLL رو مي بندم ، فايل DLL از حافظه خارج نمي شه و فضاي زيادي رو اشغال مي كنه .تا وقتي كه Host Application رو نبستم با هر بار باز شدن فرم مربوط به DLL فضاي اشغال شده Ram چند برابر مي شه .مي خواستم در اين خصوص كمكم كنيد .ممنون ميشم .
البته مي دونم كه بايد بصورت Dynamic باشه ولي نتونستم كدش رو بنويسم.
كد هاي مربوط به Host Application :
[PASS]
procedure showmdichild(MainApp: TApplication; id, namefamily, skin,
CodeManager: string); stdcall; external 'PowerLib.dll' delayed;
procedure TForm1.sButton1Click(Sender: TObject);
begin
showmdichild(Application,Edit1.Text,Edit2.Text,Edi t3.Text,Edit4.Text);
end;
[/PASS]
كد هاي مربوط به DLL :
[PASS]
var
DLLApp: TApplication;
procedure showmdichild(MainApp: TApplication;id,namefamily,skin,CodeManager:string ); stdcall;
var
Child: TForm1;
begin
if not Assigned(DLLApp) then
begin
DLLApp := Application;
Application := MainApp;
end;
Child := TForm1.Create(Application.MainForm);
Child.Show;
end;
//--------------------------------
procedure MyDLLProg(Reason: integer);
begin
if Reason = DLL_PROCESS_DETACH then
if Assigned(DLLApp) then
begin
Application := DLLApp;
end;
end;
exports showmdichild;
//--------------------------------------
begin
DllProc := MyDLLProg;
end.
[/PASS]
عكس هاي برنامه به همراه فضاي اشغال شده RAM:
اجراي بار اول
![اجراي بار اول.JPG اجراي بار اول.JPG](https://forum.majidonline.com/data/attachments/79/79224-e704eefc33586525d3d6f410f7155c41.jpg)
اجراي بار دوم
![اجراي بار دوم.JPG اجراي بار دوم.JPG](https://forum.majidonline.com/data/attachments/79/79225-68617b3ab75458537be92ab42ec5c054.jpg)
اگه ممكنه لطفا كد درستشو واسم بزاريد .ممنون