كمك در مورد از حافظه خارج كردن فايل هاي dll در دلفي

mehrdad007

عضو جدید
كمك در مورد از حافظه خارج كردن فايل هاي dll در دلفي


با سلام خدمت دوستان گرامي
من يك برنامه طراحي كردم كه از يك 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].

تصاوير برنامه
اجراي بار اول

اجراي بار دوم
اجراي بار دوم.jpg
 

پیوست ها

  • اجراي بار اول.jpg
    اجراي بار اول.jpg
    45.4 کیلوبایت · بازدیدها: 0

mehrdad007

عضو جدید
البته بعدش كد رو داخل Host Application اينجوري تغيير دادم Dynamic DLl . ولي وقتي اجرا مي كنم و روي دكمه اجراي DLL مي زنم كه فرم مربوط به DLL باز بشه ، كلا برنامه بسته ميشه
کد:
  [COLOR=#000000][B]type[/B][/COLOR]
   showmdichild [COLOR=#339933]=[/COLOR] [COLOR=#000000][B]Procedure[/B][/COLOR][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]procedure[/B][/COLOR] TForm1.[COLOR=#0066ee]sButton1Click[/COLOR][COLOR=#009900]([/COLOR]Sender[COLOR=#339933]:[/COLOR] TObject[COLOR=#009900])[/COLOR];
 [COLOR=#000000][B]var[/B][/COLOR]  
 libhandel[COLOR=#339933]:[/COLOR] THandle;  
 tsadta[COLOR=#339933]:[/COLOR]
 showmdichild;
 [COLOR=#000000][B]begin[/B][/COLOR]  
  libhandel [COLOR=#339933]:=[/COLOR] LoadLibrary[COLOR=#009900]([/COLOR][COLOR=#ff0000]'PowerLib.dll'[/COLOR][COLOR=#009900])[/COLOR]; 
  [COLOR=#000000][B]try[/B][/COLOR]   
    [COLOR=#000000][B]if[/B][/COLOR] libhandel <[COLOR=#339933]=[/COLOR] [COLOR=#cc66cc]32[/COLOR] [COLOR=#000000][B]then[/B][/COLOR] 
      [COLOR=#000000][B]raise[/B][/COLOR] Exception.[COLOR=#0066ee]Create[/COLOR][COLOR=#009900]
([/COLOR][COLOR=#ff0000]'فايل DLL مورد نظر وجود ندارد'[/COLOR][COLOR=#009900])
[/COLOR];     @tsadta [COLOR=#339933]:=[/COLOR] GetProcAddress[COLOR=#009900]([/COLOR]libhandel[COLOR=#339933],[/COLOR] [COLOR=#ff0000]'showmdichild'[/COLOR][COLOR=#009900])[/COLOR]; 
    [COLOR=#000000][B]if[/B][/COLOR] [COLOR=#000000][B]not[/B][/COLOR][COLOR=#009900]([/COLOR]@tsadta [COLOR=#339933]=[/COLOR] [COLOR=#000000][B]nil[/B][/COLOR][COLOR=#009900])[/COLOR] [COLOR=#000000][B]then[/B][/COLOR]
     [COLOR=#000000][B]begin[/B][/COLOR] 
     tsadta[COLOR=#009900]([/COLOR]Application[COLOR=#339933],[/COLOR] Edit1.[COLOR=#0066ee]Text[/COLOR][COLOR=#339933],[/COLOR] Edit2.[COLOR=#0066ee]Text[/COLOR][COLOR=#339933],[/COLOR] Edit3.[COLOR=#0066ee]Text[/COLOR][COLOR=#339933],[/COLOR] Edit4.[COLOR=#0066ee]Text[/COLOR][COLOR=#009900])[/COLOR]; 
    [COLOR=#000000][B]end
[/B][/COLOR]     [COLOR=#000000][B]else[/B][/COLOR] 
    [COLOR=#000000][B]begin[/B][/COLOR] 
       RaiseLastOSError;
         [COLOR=#000000][B]end[/B][/COLOR];
   [COLOR=#000000][B]finally
[/B][/COLOR]      FreeLibrary[COLOR=#009900]([/COLOR]libhandel[COLOR=#009900])[/COLOR]; 
    [COLOR=#000000][B]end[/B][/COLOR];
 
Similar threads
Thread starter عنوان تالار پاسخ ها تاریخ
S مهم : اجرا و compile كردن فايل .pas به تنهايي ( بدون dproj. و... ) Delphi 0

Similar threads

بالا