mehrdad007
عضو جدید
با سلام خدمت دوستان گرامي
من يك برنامه طراحي كردم كه از يك Host Application و يك فايل DLL كه داراي فرم هست تشكيل شده .
وقتي در Host Application بر روي يك Button كليك مي كنم اين DLL اجرا مي شه .ولي وقتي فرم مربوط به DLL رو مي بندم ، فايل DLL از حافظه خارج نمي شه و فضاي زيادي رو اشغال مي كنه .تا وقتي كه Host Application رو نبستم با هر بار باز شدن فرم مربوط به DLL فضاي اشغال شده Ram چند برابر مي شه .مي خواستم در اين خصوص كمكم كنيد .ممنون ميشم .
البته مي دونم كه بايد بصورت Dynamic باشه ولي نتونستم كدش رو بنويسم.
كد هاي مربوط به Host Application :
کد:
[/SIZE]
[COLOR=#000000][B]procedure[/B][/COLOR] showmdichild[COLOR=#009900]([/COLOR]MainApp[COLOR=#339933]:[/COLOR] TApplication; id[COLOR=#339933],[/COLOR] namefamily[COLOR=#339933],[/COLOR] skin[COLOR=#339933],[/COLOR] CodeManager[COLOR=#339933]:[/COLOR] [COLOR=#000066][B]string[/B][/COLOR][COLOR=#009900])[/COLOR]; [COLOR=#000000][B]stdcall[/B][/COLOR]; [COLOR=#000000][B]external[/B][/COLOR] [COLOR=#ff0000]'PowerLib.dll'[/COLOR] delayed; [COLOR=#000000][B]procedure[/B][/COLOR] TForm1.[COLOR=#0066ee]sButton1Click[/COLOR][COLOR=#009900]([/COLOR]Sender[COLOR=#339933]:[/COLOR] TObject[COLOR=#009900])[/COLOR];
[COLOR=#000000][B]begin[/B][/COLOR]
showmdichild[COLOR=#009900]([/COLOR]Application[COLOR=#339933],[/COLOR]Edit1.[COLOR=#0066ee]Text[/COLOR][COLOR=#339933],[/COLOR]Edit2.[COLOR=#0066ee]Text[/COLOR][COLOR=#339933],[/COLOR]Edi t3.[COLOR=#0066ee]Text[/COLOR][COLOR=#339933],[/COLOR]Edit4.[COLOR=#0066ee]Text[/COLOR][COLOR=#009900])[/COLOR];
[COLOR=#000000][B]end[/B][/COLOR];[SIZE=2]
[/SIZE]
كد هاي مربوط به DLL
کد:
[COLOR=#000000][B]var[/B][/COLOR] DLLApp[COLOR=#339933]:[/COLOR] TApplication;
[COLOR=#000000][B]procedure[/B][/COLOR] showmdichild[COLOR=#009900]([/COLOR]MainApp[COLOR=#339933]:[/COLOR] TApplication;id[COLOR=#339933],[/COLOR]namefamily[COLOR=#339933],[/COLOR]skin[COLOR=#339933],[/COLOR]CodeManager[COLOR=#339933]:[/COLOR][COLOR=#000066][B]string[/B][/COLOR] [COLOR=#009900])[/COLOR]; [COLOR=#000000][B]stdcall[/B][/COLOR];
[COLOR=#000000][B]var[/B][/COLOR]
Child[COLOR=#339933]:[/COLOR] TForm1;
[COLOR=#000000][B]begin[/B][/COLOR]
[COLOR=#000000][B]if[/B][/COLOR] [COLOR=#000000][B]not[/B][/COLOR] Assigned[COLOR=#009900]([/COLOR]DLLApp[COLOR=#009900])[/COLOR] [COLOR=#000000][B]then[/B][/COLOR]
[COLOR=#000000][B]begin[/B][/COLOR]
DLLApp [COLOR=#339933]:=[/COLOR] Application;
Application [COLOR=#339933]:=[/COLOR] MainApp;
[COLOR=#000000][B]end[/B][/COLOR];
Child [COLOR=#339933]:=[/COLOR] TForm1.[COLOR=#0066ee]Create[/COLOR][COLOR=#009900]([/COLOR]Application.[COLOR=#0066ee]MainForm[/COLOR][COLOR=#009900])[/COLOR]; Child.[COLOR=#0066ee]Show[/COLOR];
[COLOR=#000000][B]end[/B][/COLOR];
[COLOR=#666666][I]//--------------------------------[/I][/COLOR]
[COLOR=#000000][B]procedure[/B][/COLOR] MyDLLProg[COLOR=#009900]([/COLOR]Reason[COLOR=#339933]:[/COLOR] [COLOR=#000066][B]integer[/B][/COLOR][COLOR=#009900])[/COLOR];
[COLOR=#000000][B]begin[/B][/COLOR]
[COLOR=#000000][B]if[/B][/COLOR] Reason [COLOR=#339933]=[/COLOR] DLL_PROCESS_DETACH [COLOR=#000000][B]then[/B][/COLOR]
[COLOR=#000000][B]if[/B][/COLOR] Assigned[COLOR=#009900]([/COLOR]DLLApp[COLOR=#009900])[/COLOR] [COLOR=#000000][B]then[/B][/COLOR]
[COLOR=#000000][B]begin[/B][/COLOR]
Application [COLOR=#339933]:=[/COLOR] DLLApp;
[COLOR=#000000][B]end[/B][/COLOR]; [COLOR=#000000][B]end[/B][/COLOR]; [COLOR=#000000][B]exports[/B][/COLOR] showmdichild;
[COLOR=#666666][I]//--------------------------------------
[/I][/COLOR] [COLOR=#000000][B]begin[/B][/COLOR]
DllProc [COLOR=#339933]:=[/COLOR] MyDLLProg;
[COLOR=#000000][B]end[/B][/COLOR].
تصاوير برنامه
اجراي بار اول
اجراي بار دوم